Есть ли способ узнать, почему 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)
так далее...