如何列出Haskell阴谋包安装的文件?

时间:2018-08-06 17:21:43

标签: haskell cabal ghc-pkg

是否可以列出由Haskell cabal软件包安装的文件? 换句话说:有没有办法列出与Haskell软件包相关的文件?

例如,在基于Debian的系统(包括Ubuntu)中,可以使用dpkg -l列出所有软件包,而dpkg -L package_name可以使用列出与某个文件关联的文件。给定的包

$ dpkg -L gzip
/.
/bin
/bin/gunzip
/bin/gzexe
/bin/gzip
/bin/uncompress
/bin/zcat
/bin/zcmp
/bin/zdiff
/bin/zegrep
/bin/zfgrep
/bin/zforce
/bin/zgrep
/bin/zless
/bin/zmore
/bin/znew
/usr
/usr/share
...

Arch Linux上,pacman -Ql package_name也可以达到相同的目的:

$ pacman -Ql gzip
gzip /usr/
gzip /usr/bin/
gzip /usr/bin/gunzip
gzip /usr/bin/gzexe
gzip /usr/bin/gzip
gzip /usr/bin/uncompress
gzip /usr/bin/zcat
gzip /usr/bin/zcmp
gzip /usr/bin/zdiff
gzip /usr/bin/zegrep
gzip /usr/bin/zfgrep
gzip /usr/bin/zforce
gzip /usr/bin/zgrep
gzip /usr/bin/zless
gzip /usr/bin/zmore
gzip /usr/bin/znew
gzip /usr/share/
...

最后,使用Python's PIP,可以使用pip show -f package_name显示与软件包package_name相关的文件。 1

是否有办法对使用cabalcabal通过ghc-pkg安装的软件包执行上述操作?我知道我可以使用ghc-pkg listcabal list --installed列出软件包,但不能列出与特定软件包相关的文件。

1 个答案:

答案 0 :(得分:2)

您可以使用ghc-pkg describe <pkgname>来获取安装了软件包文件的目录的集合。受软件包安装影响的只有几件事情不会被提及:

  1. GHC软件包数据库本身已被修改。 ghc-pkg list将为您显示两个标准数据库的位置。
  2. GHC不知道软件包安装的可执行文件。您可以使用cabal info <pkgname>获取可执行文件列表。
  3. 您的构建工具(即cabal-install或stack)可能会保留软件包元数据和源的缓存;从任何有意义的意义上讲,它们实际上并不是“安装”的-删除它们不会破坏任何内容-但它们是安装过程中修改的文件系统的一部分。对于cabal-install,此缓存默认为~/.cabal/packages;我对堆栈知之甚少,无法很好地回答该工具。