【问题标题】:Upgrading packages installed in a cabal sandbox升级安装在 cabal 沙箱中的软件包
【发布时间】:2014-03-05 18:23:24
【问题描述】:

我在理解如何在 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

【问题讨论】:

  • cabal sandbox delete, cabal sandbox init, cabal install --only-dependencies 是我通常做这种事情的方式。使用相对较少的依赖项,重新运行整个事情不需要很长时间。或者,您可以从您的 .cabal-sandbox/&lt;platform&gt;-package-db/ 文件夹中删除旧的 equeleto 文件夹(我可能对该文件夹路径不精确,不记得我的头顶了)
  • 感谢 bhecklilr - 对我来说似乎工作正常,虽然 yesod 平台需要 很多 时间来编译,删除包文件夹可能是一个更好的主意。请发表您的评论作为答案,我会投赞成票。

标签: haskell cabal cabal-dev


【解决方案1】:

我发现的最简单的方法是直接删除你的沙盒并重新开始

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

您也可以从.cabal-sandbox/&lt;platform&gt;/.cabal-sandbox/&lt;platform&gt;-packages.conf/ 文件夹中删除特定包,但这需要更多的“手术”。除非您的依赖项非常庞大并且您需要经常这样做,否则核选项不会太烦人。

【讨论】:

  • 我想到的另一件事是我想我忘了先运行cabal configure。在我看来,肯定可以升级依赖项,而无需从头开始重建所有内容或手动删除包。我正在旅行自动取款机,但我会在一两天内检查它是否有效。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2011-12-10
  • 2022-01-17
相关资源
最近更新 更多