Как вывести список файлов, установленных пакетом Haskell Cabal?

Есть ли способ вывести список файлов, установленных пакетом Cabal для Haskell? Другими словами: есть ли способ перечислить файлы, связанные с пакетом 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/
...

Наконец, используя PIP Python, можно использовать pip show -f package_name показать файлы, связанные с пакетом package_name, 1

Есть ли способ сделать выше для пакетов, установленных через cabal используя либо cabal или же ghc-pkg? Я знаю, что могу перечислить пакеты, используя ghc-pkg list или же cabal list --installed, но не как перечислить файлы, связанные с конкретными пакетами.

1 ответ

Ты можешь использовать ghc-pkg describe <pkgname> получить коллекцию каталогов, в которые были установлены файлы пакета. Установка пакета зависит только от нескольких вещей, которые не будут упомянуты в этом:

  1. Сама база данных GHC модифицирована. ghc-pkg list покажет вам расположение двух стандартных баз данных.
  2. Исполняемые файлы, установленные пакетом, не известны GHC. Ты можешь использовать cabal info <pkgname> чтобы получить список исполняемых файлов.
  3. Ваш инструмент сборки (например, cabal-install или stack), вероятно, хранит кэш метаданных и источников пакета; на самом деле они не "установлены" в каком-либо значимом смысле - их удаление ничего не нарушит - но они являются кусочками файловой системы, измененной в процессе установки. Для cabal-установки этот кеш по умолчанию ~/.cabal/packages; Я не знаю достаточно о стеке, чтобы ответить об этом инструменте хорошо.
Другие вопросы по тегам