首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复由ghc-pkg检查记录的问题

修复由ghc-pkg检查记录的问题
EN

Stack Overflow用户
提问于 2011-11-01 09:27:00
回答 2查看 8.2K关注 0票数 39

ghc-pkg check将列出损坏的包,以及它们损坏的原因,这是非常好的。但据我所知,没有自动处理这些损坏的包的方法。处理损坏的包的推荐方法是什么?(最好不要重新安装GHC)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-01 10:33:36

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

代码语言:javascript
复制
$ ghc-pkg unregister --user borken

这会经常抱怨注销borken会破坏其他包。你是先尝试取消注册,还是用--force立即取消注册博肯,然后再处理新出现的问题,这主要取决于你的选择。确保您只从用户db注销包。如果情况不是太糟糕,在注销一小部分包之后,ghc-pkg check将不再报告损坏的包。

另一方面,如果很大一部分软件包被破坏,在其他操作系统上可能更容易完全擦除用户的db、$ rm -rf ~/.ghc/ghc-version/package.conf.d或等价物。

无论哪种方式,你都会丢失你仍然想使用的包,所以你将尝试重新安装它们,而不会重新破坏任何东西。跑

代码语言:javascript
复制
$ 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。在world文件中,用"< 0.12“替换hmatrix上的-any”约束“产生了一个干净的安装计划。

因此,在修改了world文件中的一些约束之后,您将从cabal获得一个安装计划。检查这是否会重新安装您已有的任何软件包(安装新版本可能是可以的,重新安装相同的版本会有麻烦)。如果你对cabal的安装计划感到满意,可以在cabal install world忙的时候泡一壶好茶。再次运行ghc-pkg check,以验证一切是否正常。

一个不错的建议是:如果您不知道安装一个包需要做什么,请始终先使用--预演运行。

如果你通过使用cabal进行全局安装而破坏了你的全局包数据库,注销攻击者的策略可能会奏效,但它也可能无法挽回地破坏你的ghc,这取决于以哪种方式破坏了什么。如果您通过安装操作系统发行版的软件包破坏了全局数据库,请安装新的GHC,诅咒发行版打包者,并尝试帮助他们防止类似事件的进一步发生。

一个cabal repair命令会很好,但就目前而言,修复一个损坏的设置还需要做更多的工作。

票数 30
EN

Stack Overflow用户

发布于 2011-11-01 14:10:30

一段时间以来,我一直依赖于这个ghc-pkg-clean script。它会删除所有损坏的软件包,并根据需要重新安装它们。对于更严重的破坏,我使用ghc-pkg-reset script

但今天,我发现了ghc-pkg-autofix,它可以自动完成这一过程--被破坏的包变得完整。我不知道它能做什么,YMMV。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7961604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档