Я хотел бы увидеть список пакетов, которые зависят от определенного пакета с PIP. То есть, учитывая django
, я хотел бы видеть django-cms
, django-filer
, потому что у меня установлены эти пакеты, и все они имеют django
как зависимость.
Как я могу увидеть все пакеты, которые зависят от определенного пакета с PIP?
Ответ 1
Довольно просто:
pip show <insert_package_name_here>| grep ^Requires
Или наоборот: (извините, я ошибся!)
for NAME in $(pip freeze | cut -d= -f1); do REQ=$(pip show $NAME| grep Requires); if [[ "$REQ" =~ "$REQUIRES" ]]; then echo $REQ;echo "Package: $NAME"; echo "---" ; fi; done
перед этим установите строку поиска с помощью:
REQUIRES=django
по сути, вы должны пройти весь список и запросить каждый из них. Это может занять некоторое время.
Изменение: Также он работает только на установленных пакетах, я не вижу pip, обеспечивающий зависимости от не установленных пакетов.
Ответ 2
Я знаю, что здесь уже принят ответ, но на самом деле мне кажется, что вы хотите использовать pipdeptree:
pip install pipdeptree
pipdeptree --help
pipdeptree -r -p django
Ответ 3
Этот, для pip старше 1.3.1, отобразит все пакеты и его зависимости, вы можете проанализировать его вывод на любом языке сценариев для включений Requires ... django
:
pip freeze | cut -f 1 -d'=' | xargs -L1 pip show
Например, следующий фрагмент:
import os
import re
package = 'numpy'
regex = re.compile('.*{}($|,).*'.format(package))
def chunks(l, n): return [l[i:i+n] for i in range(0, len(l), n)]
cmd = "pip freeze | cut -f 1 -d'=' | xargs -L1 pip show"
packages = os.popen(cmd).read()
pkg_infos = chunks(packages.splitlines(), 5)
print '\n'.join(x[1][6:] for x in filter(lambda x: regex.match(x[-1]), pkg_infos))
выводит pandas
в мою систему.
Ответ 4
Один вкладыш на основе требований. txt. В этом примере я искал обратную зависимость funcsigs
и нашел mock. Просто измените funcsigs
на что-то другое.
cat requirements.txt | grep -v git | sed 's/==.*//' | xargs -I % echo 'pip show % 2>/dev/null | grep Requires | grep -q funcsigs && echo %' | sh