Когда я делаю стоп-кадр, я вижу большое количество пакетов Python, которые я не устанавливал явно, например
$ pip freeze
Cheetah==2.4.3
GnuPGInterface==0.3.2
Landscape-Client==11.01
M2Crypto==0.20.1
PAM==0.4.2
PIL==1.1.7
PyYAML==3.09
Twisted-Core==10.2.0
Twisted-Web==10.2.0
(etc.)
Есть ли способ определить, почему pip установил эти зависимые пакеты? Другими словами, как определить родительский пакет, в котором эти пакеты были зависимостями?
Например, я могу захотеть использовать Twisted и не хочу зависеть от пакета, пока не узнаю больше о том, чтобы случайно не удалить его или не обновить его.
pipdeptree -r
«Показывает дерево зависимостей в обратном порядке, т.е. подчиненные зависимости перечислены со списком пакетов, которым они нужны».pipdeptree
отлично. К сожалению, похоже, что он не учитывает зависимости для пакетов, установленных conda: например, в среде conda, гдеmatplotlib
иnumpy
были установлены с использованием pip, ноscipy
были установлены с использованием conda,scipy
в pipdeptree отображаются как не имеющие и не имеющие зависимостей (такжеpip show scipy
показывает, что требования).python -m pipdeptree
иначе (даже если исполняемый файл установлен в virtualenv), он только перечисляет системные зависимости.Команда
pip show
покажет, какие пакеты требуются для указанного пакета (обратите внимание, что указанный пакет уже должен быть установлен):pip show
был представлен в версии 1.4rc5источник
pip show
был представлен в версии 1.4rc5 и присутствует в (текущем на момент написания) 1.4.1pip freeze | grep -v "\-e" | sed s/\=\=.*// | awk 'system("pip show " $1)' | grep -E '^(Name:|Requires:)' | sed s/Name:/\\\nName:/
- но кажется, что pipdeptree - теперь лучшее решение.Как я недавно сказал в теме hn , я рекомендую следующее:
Получите закомментированный
requirements.txt
файл с вашими основными зависимостями:Установите ваши зависимости:
pip install -r requirements.txt
. Теперь вы получите полный список ваших зависимостей сpip freeze -r requirements.txt
:Это позволяет вам сохранять структуру файлов с комментариями, хорошо отделяя ваши зависимости от зависимостей ваших зависимостей. Таким образом, у вас будет намного приятнее время, когда вам нужно удалить одного из них :)
Обратите внимание на следующее:
requirements.raw
с контролем версий, чтобы восстановить свою полнуюrequirements.txt
.pip install --no-install <package_name>
для перечисления конкретных требований.источник
pip freeze -r requirements.txt
не так широко используется. Очень полезно для поддержания зависимостей и подчиненных зависимостей.pip install
больше не поддерживает--no-install
.Вы также можете использовать однострочную команду, которая передает пакеты в требованиях к pip-шоу.
источник
<package_name>==<package_version>
.Прежде всего
pip freeze
отображает все установленные на данный момент пакеты Python, необязательно использующие PIP.Во-вторых, пакеты Python содержат информацию о зависимых пакетах, а также необходимые версии . Вы можете увидеть зависимости конкретного pkg, используя методы, описанные здесь . Когда вы обновляете пакет, установочный скрипт, такой как PIP, будет обрабатывать обновление зависимостей для вас.
Для решения проблемы обновления пакетов я рекомендую использовать файлы требований PIP . Вы можете определить, какие пакеты и версии вам нужны, и установить их сразу, используя pip install.
источник
Используйте pipupgrade !
pipupgrade отображает график зависимости и выделяет каждый пакет для возможного обновления (на основе семантического контроля версий). Он также отображает конфликтующие дочерние зависимости красивым способом.
pipupgrade
также обеспечивает обновление пакетов, представленных в нескольких средах Python. Совместим с Python2.7 +, Python3.4 + и pip9 +, pip10 +, pip18 +, pip19 +.источник
(обходной путь, не верный ответ)
У меня была такая же проблема: lxml не устанавливался, и я хотел знать, кому нужен lxml. Не кому нужен lxml . Закончилось обходом вопроса.
отмечая, где мои пакеты сайта были помещены.
перейдите туда и рекурсивный grep для импорта (последний - grep --invert-match служит для удаления из рассмотрения собственных файлов lxml).
Да, не ответ о том, как использовать pip для этого, но я не получил никакого успеха от предложений здесь, по любой причине.
источник
Я написал быстрый сценарий, чтобы решить эту проблему. Следующий скрипт отобразит родительский (зависимый) пакет (ы) для любого данного пакета. Таким образом, вы можете быть уверены, что безопасно обновить или установить какой-либо конкретный пакет. Может использоваться следующим образом:
dependants.py PACKAGENAME
источник
get_installed_distributions()
метод больше не доступен. github.com/pypa/pip/issues/5243