使用 cabal-install 安装包时,它也会间接安装所有依赖项。鉴于.cabal/packages
我没有直接安装的文件夹中的某个包,有没有办法找到它依赖的其他包?
问问题
520 次
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 回答