繁体   English   中英

解决ghc-pkg检查中发现的问题

[英]Fixing issues noted by ghc-pkg check

ghc-pkg check会列出损坏的包,以及它们被破坏的原因,这相当不错。 但据我所知,没有自动化的方法来处理那些破损的包裹。 处理破损包裹的推荐方法是什么? (最好不要重新安装GHC)

希望您已经足够聪明,不会破坏您的全局包数据库中的任何内容。 那里的破损很容易意味着重新安装GHC是必要的。 因此,让我们假设破坏仅限于用户包db(除了可能是由用户包遮蔽的全局中的一个或两个包)。 如果只有少数软件包损坏,您可以通过取消注册有问题的软件包来修复您的设置,

$ ghc-pkg unregister --user borken

经常会抱怨未注册的borken将打破其他包裹。 无论您是先尝试取消注册,还是立即取消注册borken,然后使用--force处理新发现的事情,这主要是一个选择问题。 确保仅从用户db中取消注册包。 如果事情不是太严峻,在取消注册一些软件包之后, ghc-pkg check将报告不再有破坏的软件包。
另一方面,如果大部分软件包被破坏,则可能更容易完全擦除用户db, $ rm -rf ~/.ghc/ghc-version/package.conf.d或其他类似的$ rm -rf ~/.ghc/ghc-version/package.conf.d操作系统。

无论哪种方式,您将丢失仍然想要使用的包,因此您将尝试重新安装它们而不会重新打破任何内容。

$ cabal install world --dry-run

这将尝试为您使用cabal-install所有软件包生成一致的安装计划。 如果它没有这样做,它将打印出原因,你可以通过向世界文件( ~/.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 在世界文件中用“<0.12”替换hmatrix上的-any “约束”产生了一个干净的安装计划。
因此,在对世界文件中的约束进行一些调整之后,您将从cabal获得安装计划。 检查是否会重新安装您已经拥有的任何软件包(安装较新版本可能没问题,重新安装相同版本意味着麻烦)。 如果你对cabal的安装计划感到满意,那么在GHC忙碌时, cabal install world并酿造一壶美味的茶。 再次运行ghc-pkg check ,验证所有是否正常。

一条通常很好的建议:如果您不知道安装包的内容,请始终先使用--dry-run。

如果您通过使用cabal进行全局安装来破坏全局包数据库,则取消注册违规者的策略可能会起作用,但它也可能会不可逆转地破坏您的ghc,这取决于以哪种方式破坏。 如果您通过从操作系统发行版安装软件包来破坏全局数据库,请安装新的GHC,诅咒发行版包装程序,并尝试帮助它们防止进一步的此类事件。

一个cabal repair命令会非常好,但是暂时修复一个破损的设置是不幸的。

有一段时间我依赖这个ghc-pkg-clean脚本 它删除所有损坏的包,然后根据需要重新安装它们。 对于更严重的破损,我使用ghc-pkg-reset脚本

但是今天,我找到了ghc-pkg-autofix ,它可以自动完成这个进一步破坏的软件包。 我不知道它做了什么,YMMV。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM