我在理解如何升级cabal沙箱中的软件包时遇到了一些麻烦。我想将esqueleto-1.3.4.5
升级为esqueleto-1.3.5
并将myapp.cabal
更改为依赖esqueleto >= 1.3.5 && < 1.4
。
$ 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)
错误在我看来好像cabal正在尝试使用已安装的esqueleto版本来解析依赖关系,esqueleto-1.3.4.5/installed-ac7...
有人可以解释一下这是如何工作的吗?
我的直觉是我应该使用--upgrade-dependencies
来执行此操作,但我也尝试--only-dependencies
和--reinstall
。
答案 0 :(得分:6)
我发现的最简单的方法就是将你的沙箱核对并重新开始
$ cabal sandbox delete
$ cabal sandbox init
$ cabal install --only-dependencies
您也可以从.cabal-sandbox/<platform>/
和.cabal-sandbox/<platform>-packages.conf/
文件夹中删除特定的包,但这需要更多的“手术”。除非您的依赖关系很大并且您需要经常这样做,否则核选项并不会太烦人。