使用cabal-install安装软件包时,它还会间接安装所有依赖项。鉴于我的.cabal/packages
文件夹中有一个我没有直接安装的软件包,有没有办法找到它所依赖的其他软件包?
答案 0 :(得分: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
。
答案 1 :(得分: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)
等...