有没有办法找到为什么cabal安装了某个包?

hug*_*omg 9 haskell ghc cabal cabal-install ghc-pkg

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

Sha*_*eep 15

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

ghc-pkg dot | tred | dot -Tpng > pkgs.png
Run Code Online (Sandbox Code Playgroud)

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

您还可以使用:

ghc-pkg unregister <pkgname>
Run Code Online (Sandbox Code Playgroud)

这将打印一个包列表,如果你卸载了这个包,它会破坏,这实际上是你正在寻找的:

$ 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)
Run Code Online (Sandbox Code Playgroud)

更新

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

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

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