没有“cabal升级”的最佳解决方法是什么?

时间:2011-08-01 22:16:38

标签: haskell cabal

我想升级所有软件包,而不只是升级cabal install --upgrade-dependencies的特定软件包。

2 个答案:

答案 0 :(得分:51)

这个shell hackery在OS X上对我有用:

cabal list --simple-output --installed | awk '{print $1}' | uniq | xargs -I {} cabal install {} --reinstall

编辑:现在强制重新安装,并避免在存在多个版本时多次安装软件包。感谢您的评论!

稍后编辑:现在Cabal沙箱和Stack存在,我强烈建议您不要尝试升级软件包。如果您可以删除现有的沙箱并重新安装最新的依赖项,那么您最终会遇到更少的麻烦。

答案 1 :(得分:7)

.cabal/world文件包含您显式安装的每个软件包的列表(在cabal install命令中列出,而不是通过依赖项)。修剪它以删除仅作为依赖项使用的包,不推荐使用的包以及您更喜欢升级的版本锁定包。

Cabal并不知道自己如何清理,但你可以删除几乎所有东西。下一个命令将从.cabal/packages(tarball缓存)重新安装:

cp -t bin .cabal/bin/cabal
rm -rf .cabal/{bin,lib,share} .ghc/*-*-*/
ghc-pkg check |&egrep -- '^[A-Za-z0-9-]+-[0-9]' |xargs -n1 --no-run-if-empty ghc-pkg unregister

现在重新安装手动安装的所有内容:

cabal install world --upgrade-dependencies --force-reinstalls