2014-03-05 8 views
9

Ich habe Probleme zu verstehen, wie Pakete in einer Cabal-Sandbox aktualisiert werden. Ich möchte esqueleto-1.3.4.5 zu esqueleto-1.3.5 aktualisieren und änderte meine myapp.cabal, um auf esqueleto >= 1.3.5 && < 1.4 zu hängen.Aktualisieren von Paketen, die in einer Cabal-Sandbox installiert sind

$ cabal --version cabal-install version 1.18.0.2 using version 1.18.1.2 of the Cabal library $ cabal install --upgrade-dependencies Resolving dependencies... cabal: Could not resolve dependencies: trying: esqueleto-1.3.4.5/installed-ac7... (user goal) next goal: myapp (user goal) rejecting: myapp-0.0.0 (conflict: esqueleto==1.3.4.5/installed-ac7..., myapp => esqueleto>=1.3.5 && <1.4)

Der Fehler mir sieht aus, als ob Clique versucht, die installierte Version von esqueleto zu lösen Abhängigkeiten verwenden, esqueleto-1.3.4.5/installed-ac7... Könnte jemand erklären, wie das funktioniert?

Meine Intuition war, dass ich --upgrade-dependencies verwenden sollte, um dies zu tun, aber ich versuchte auch --only-dependencies und --reinstall.

+2

'cabal sandbox delete',' cabal sandbox init', 'cabal install --only-dependencies' ist, wie ich normalerweise so etwas mache. Mit einer relativ kleinen Anzahl von Abhängigkeiten dauert es nicht lange, das Ganze erneut auszuführen. Alternativ könntest du einfach den alten 'equeleto'-Ordner aus deinem' .cabal-sandbox/ -package-db/'-Ordner löschen (ich bin vielleicht unpräzise in diesem Ordnerpfad, kann mich nicht an meinen Kopf erinnern) – bheklilr

+0

Danke bhecklilr - scheint für mich in Ordnung zu sein, obwohl die yesod-Plattform viel Zeit zum kompilieren braucht, könnte das Löschen des Paketordners eine bessere Idee sein. Bitte posten Sie Ihren Kommentar als Antwort, ich werde ihn aufwerten. –

Antwort

6

Der einfachste Weg, die ich gefunden habe ist nur Ihre Sandbox-Nuke und von vorn beginnen

$ cabal sandbox delete 
$ cabal sandbox init 
$ cabal install --only-dependencies 

Sie alternativ das spezifische Paket aus den .cabal-sandbox/<platform>/ und .cabal-sandbox/<platform>-packages.conf/ Ordner löschen können, aber das erfordert ein bisschen mehr „Chirurgie“ . Wenn Ihre Abhängigkeiten nicht massiv sind und Sie dies häufig tun müssen, ist die nukleare Option nicht zu ärgerlich.

+0

Etwas anderes, was mir in den Sinn gekommen ist, ist, dass ich glaube, ich habe 'cabal configure' zuerst vergessen. Es scheint mir so, als ob es sicher möglich ist, Abhängigkeiten zu aktualisieren, ohne alles von Grund auf neu zu erstellen oder das Paket manuell zu löschen. Ich reise atm, aber ich überprüfe, ob das in ein oder zwei Tagen funktioniert. Danke –

+0

* ping * hat es funktioniert? –

Verwandte Themen