如何在 cabal 中查找已安装的包的反向依赖项

Posted

技术标签:

【中文标题】如何在 cabal 中查找已安装的包的反向依赖项【英文标题】:How to find installed reverse dependencies of a package in cabal 【发布时间】:2016-02-03 05:16:52 【问题描述】:

我需要安装最新的基础包,但 cabal 不允许我这样做

cabal install base --reinstall
Resolving dependencies...
cabal: Could not resolve dependencies:
next goal: base (user goal)
rejecting: base-4.8.2.0, 4.8.1.0, 4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0, 4.6.0.1,
4.6.0.0, 4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0, 4.3.0.0, 4.2.0.2,
4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0 (only already installed instances can be
used)
rejecting: base-3.0.3.2 (conflict: base => base>=4.0 && <4.3)
rejecting: base-3.0.3.1 (conflict: base => base>=4.0 && <4.2)
Dependency tree exhaustively searched.

所以我认为,当我将持有这个包的依赖项注销到旧版本时,我可以做到

ghc-pkg unregister some_annoying_package

但是我怎样才能找到这些包。我只找到了

cabal-db revdeps base

这给了我所有的依赖,不仅仅是安装的。

【问题讨论】:

您无法使用 cabal 重新安装 base。如果您需要更新base,您必须更新您的编译器版本。一般来说,如果你这样做ghc-pkg unregister &lt;pkg&gt;,它会首先告诉你这会破坏什么(因此,你需要取消注册以取消注册&lt;pkg&gt; 的依赖项),但这不适用于这种情况。 谢谢@user2407038,你拯救了我的一天!我重新安装了 ghc 并更新了基础包! 此外,反向依赖不会阻止您安装新版本的软件包。同一包(具有不同版本号)的多个安装可以愉快地在 GHC 的包数据库中并存。 (现代 GHC 甚至可以支持使用不同依赖树的同一库的同一版本的多个安装,尽管 cabal 尚未正式支持此功能。) @DanielWagner,Haskell 世界正屏息等待对上述功能的适当支持,坐在我们座位的边缘。那将是美好的一天。当然,仍然需要处理缺少一流的参数化模块、孤儿实例、重叠和封闭类型家族等问题。 @user2407038 因为您的评论解决了问题,您应该将其作为答案提交。 【参考方案1】:

更新编译器更新了基础包。正如 user2407038 所解释的:

你不能用 cabal 重新安装 base。如果你需要更新基础,你必须更新你的编译器版本。一般来说,如果你执行 ghc-pkg unregister ,它会首先告诉你这会破坏什么(因此,你需要取消注册到 unregister 的依赖项),但这不适用于这种情况。

【讨论】:

以上是关于如何在 cabal 中查找已安装的包的反向依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何将 dev 分支安装到 Cabal 沙箱中

如何解决 cabal 中损坏的依赖关系?

laravel巧用composer

实际操作中遇到的问题--Django中查看已安装的包的相关命令

查找Ubuntu下包的归属

NPM - 如何在不更新或添加 package.json 中描述的包的情况下安装新包