Есть ли способ узнать, почему Cabal установил определенный пакет?

При установке пакета с помощью cabal-install он также косвенно устанавливает все зависимости. Учитывая определенный пакет в моем .cabal/packages Папка, которую я не установил напрямую, есть ли способ узнать, от каких других пакетов она зависела?

2 ответа

Решение

Я где-то нашел эту команду (не помню, где сейчас) и регулярно использую ее для создания графика зависимостей моих установленных пакетов:

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,

Я нашел 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)

так далее...

Другие вопросы по тегам