我想升级所有软件包,而不只是升级cabal install --upgrade-dependencies
的特定软件包。
答案 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