9

使用 cabal-install 安装包时,它也会间接安装所有依赖项。鉴于.cabal/packages我没有直接安装的文件夹中的某个包,有没有办法找到它依赖的其他包?

4

2 回答 2

15

我在某个地方找到了这个命令(现在不记得在哪里)并定期使用它来生成我安装的包的依赖关系图:

ghc-pkg dot | tred | dot -Tpng > pkgs.png

请注意,它实际上~/.ghc包含已安装的包信息,而不是~/.cabal.

您还可以使用:

ghc-pkg unregister <pkgname>

这将打印一个软件包列表,如果您卸载此软件包,这些软件包将中断,这实际上是您正在寻找的:

$ ghc-pkg unregister aeson
ghc-pkg: unregistering aeson would break the following packages: criterion-0.8.0.0 yesod-1.2.4 .... (use --force to override)

更新

dot -Tsvg > pkgs.svg在上述命令中使用还允许您使用文本搜索(例如,如果您在浏览器中打开文件)。

此外,cab实用程序对于显示依赖关系和反向依赖关系等非常有用。

对于堆栈用户stack dot --external,可以从您的项目目录中使用来代替上面的ghc-pkg dot.

于 2014-01-04T22:39:39.787 回答
3

我发现cabal-db很有帮助。例如,您可以运行

cabal-db revdeps semigroupoids

它会告诉你

zippers: semigroupoids (>=4 && <5)
wl-pprint-extras: semigroupoids (>=3 && <5)
vector-instances: semigroupoids (>=3)
validation: semigroupoids (>=4.0)
transformers-abort: semigroupoids (>=1.2)
these: semigroupoids (>=1.0 && <4.1)

ETC...

于 2014-06-19T02:07:36.557 回答