Dan*_*ton 39 dependencies haskell ghc
这将是一个相当不错的ghc-pkg check
列出破损的包,以及为什么它们被打破.但据我所知,没有自动化的方法来处理那些破损的包裹.处理破损包裹的推荐方法是什么?(最好不要重新安装GHC)
Dan*_*her 30
希望您已经足够聪明,不会破坏您的全局包数据库中的任何内容.那里的破损很容易意味着重新安装GHC是必要的.因此,让我们假设破坏仅限于用户包db(除了可能是由用户包遮蔽的全局中的一个或两个包).如果只有少数软件包损坏,您可以通过取消注册有问题的软件包来修复您的设置,
$ ghc-pkg unregister --user borken
Run Code Online (Sandbox Code Playgroud)
经常会抱怨未注册的borken将打破其他包裹.无论您是先尝试取消注册,还是立即取消注册borken,--force
然后处理新破坏的内容,大多数情况下都是一个选择问题.确保仅从用户db中取消注册包.如果事情不是太严峻,在取消注册一些软件包之后,ghc-pkg check
将报告不再有破坏的软件包.
另一方面,如果大部分软件包被破坏,则可能更容易完全擦除用户数据库$ rm -rf ~/.ghc/ghc-version/package.conf.d
或其他操作系统上的等效数据库.
无论哪种方式,您将丢失仍然想要使用的包,因此您将尝试重新安装它们而不会重新打破任何内容.跑
$ cabal install world --dry-run
Run Code Online (Sandbox Code Playgroud)
这将尝试为您安装的所有软件包生成一致的安装计划cabal-install
.如果它没有这样做,它将打印出原因,然后你可以通过向world文件(~/.cabal/world
)中列出的包添加约束来解决问题- 例如,虽然我没有破坏的包(根据ghc)/ghc-pkg),cabal install world --dry-run
告诉我它无法配置vector-algorithms-0.5.2
,这取决于vector >= 0.6 && < 0.8
(我已vector-0.7.1
安装).原因是hmatrix-0.12.0.1
需要vector >= 0.8
.-any
在世界文件中用"<0.12" 替换hmatrix上的"约束"产生了一个干净的安装计划.
因此,在对世界文件中的约束进行一些调整之后,您将从cabal获得安装计划.检查是否会重新安装您已经拥有的任何软件包(安装较新版本可能没问题,重新安装相同版本意味着麻烦).如果你对cabal的安装计划感到满意,cabal install world
并且在GHC忙碌的时候泡好一壶茶.ghc-pkg check
再次运行,验证一切正常.
一条通常很好的建议:如果您不知道安装包的内容,请始终先使用--dry-run.
如果您通过使用cabal进行全局安装来破坏全局包数据库,则取消注册违规者的策略可能会起作用,但它也可能会不可逆转地破坏您的ghc,这取决于以哪种方式破坏.如果您通过从操作系统发行版安装软件包来破坏全局数据库,请安装新的GHC,诅咒发行版包装程序,并尝试帮助它们防止进一步的此类事件.
一个cabal repair
命令将是非常好的,但暂时,修复破碎的设置是不幸的是更多的工作.
Sim*_*ael 15
有一段时间我依赖这个ghc-pkg-clean脚本.它删除所有损坏的包,然后根据需要重新安装它们.对于更严重的破损,我使用ghc-pkg-reset脚本.
但是今天,我找到了ghc-pkg-autofix,它可以自动完成这个进一步破坏的软件包.我不知道它做了什么,YMMV.