Принятый ответ больше не актуален для более современных версий pip и не дает немедленного ответа без просмотра нескольких комментариев, поэтому я даю обновленный ответ.
Это было протестировано с версиями 8.1.2 , 9.0.1 , 10.0.1 и 18.1 .
Чтобы получить вывод, не загромождая текущий каталог в Linux, используйте
@ hans-musgrave сделал хороший замечание в другом ответе, которого я раньше не замечал, поэтому обновил сценарий bash, чтобы исключить только строки, соответствующие пакету вместе с концом строки или началом действительного спецификатора версии, а не любой строкой, которая содержит имя пакета.
Jmills
2
Некоторые пакеты предоставляют только двоичные файлы, поэтому --no-binary :all:это не лучшая идея. Проект, который поставлял только wheel, а не sdist, провалился.
wim
3
В конце концов, это загрузка и компиляция для всех пакетов зависимостей, что может быть очень медленным ....
Луи Ян
1
Обратите внимание, что здесь не перечислены уже установленные зависимости (что подходит для OP).
$ johnnydep requests
name summary
------------------------- ----------------------------------------------------------------------
requests Python HTTP for Humans.
├── certifi>=2017.4.17 Python package for providing Mozilla's CA Bundle.
├── chardet<3.1.0,>=3.0.2 Universal encoding detector for Python 2 and 3
├── idna<2.7,>=2.5 Internationalized Domain Names in Applications (IDNA)
└── urllib3<1.23,>=1.21.1 HTTP library with thread-safe connection pooling, file post, and more.
Более сложное дерево:
$ johnnydep ipython
name summary
-------------------------------- -----------------------------------------------------------------------------
ipython IPython: Productive Interactive Computing
├── appnope Disable App Nap on OS X 10.9
├── decorator Better living through Python with decorators
├── jedi>=0.10 An autocompletion tool for Python that can be used for text editors.
│ └── parso==0.1.1 A Python Parser
├── pexpect Pexpect allows easy control of interactive console applications.
│ └── ptyprocess>=0.5 Run a subprocess in a pseudo terminal
├── pickleshare Tiny 'shelve'-like database with concurrency support
├── prompt-toolkit<2.0.0,>=1.0.4 Library for building powerful interactive command lines in Python
│ ├── six>=1.9.0 Python 2and3 compatibility utilities
│ └── wcwidth Measures number of Terminal column cells of wide-character codes
├── pygments Pygments is a syntax highlighting package written in Python.
├── setuptools>=18.5 Easily download, build, install, upgrade, and uninstall Python packages
├── simplegeneric>0.8 Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
└── traitlets>=4.2 Traitlets Python config system
├── decorator Better living through Python with decorators
├── ipython-genutils Vestigial utilities from IPython
└── six Python 2 and 3 compatibility utilities
Я скачал это и использую, это отличный пакет. НО не требует установки пакетов? OP специально запрашивает подход, который не требует установки. Важно предостеречь.
so860 06
5
@ so860 Нет, установка пакетов не требуется. В том-то и дело, что он работает в изолированной среде.
wim
Чтобы было ясно: установка johnnydepсама устанавливает зависимости.
GPHemsley
1
@wim: этот проект - чистое наблюдение! Любить это !
Джонатан ДЕХТИАР
@JonathanDEKHTIAR спасибо за добрые слова :)
wim
17
Если и только если пакет установлен, вы можете использовать pip show <package>. Ищите поле Requires:в конце вывода. Ясно, что это нарушает ваше требование, но тем не менее может быть полезно.
Например:
$ pip --version
pip 7.1.0 [...]
$ pip show pytest
---
Metadata-Version: 2.0
Name: pytest
Version: 2.7.2
Summary: pytest: simple powerful testing with Python
Home-page: http://pytest.org
Author: Holger Krekel, Benjamin Peterson, Ronny Pfannschmidt, Floris Bruynooghe and others
Author-email: holger at merlinux.eu
License: MIT license
Location: /home/usr/.tox/develop/lib/python2.7/site-packages
Requires: py
Это показывает только прямые требования, все транзитивные зависимости будут отсутствовать. И это требует установки. Так что это не совсем ответ на вопрос.
Самое близкое, что вы можете получить с помощью pip напрямую, - это использовать --no-installаргумент:
pip install --no-install <package>
Например, это результат установки сельдерея:
Downloading/unpacking celery
Downloading celery-2.5.5.tar.gz (945Kb): 945Kb downloaded
Running setup.py egg_info for package celery
no previously-included directories found matching 'tests/*.pyc'
no previously-included directories found matching 'docs/*.pyc'
no previously-included directories found matching 'contrib/*.pyc'
no previously-included directories found matching 'celery/*.pyc'
no previously-included directories found matching 'examples/*.pyc'
no previously-included directories found matching 'bin/*.pyc'
no previously-included directories found matching 'docs/.build'
no previously-included directories found matching 'docs/graffles'
no previously-included directories found matching '.tox/*'
Downloading/unpacking anyjson>=0.3.1 (from celery)
Downloading anyjson-0.3.3.tar.gz
Running setup.py egg_info for package anyjson
Downloading/unpacking kombu>=2.1.8,<2.2.0 (from celery)
Downloading kombu-2.1.8.tar.gz (273Kb): 273Kb downloaded
Running setup.py egg_info for package kombu
Downloading/unpacking python-dateutil>=1.5,<2.0 (from celery)
Downloading python-dateutil-1.5.tar.gz (233Kb): 233Kb downloaded
Running setup.py egg_info for package python-dateutil
Downloading/unpacking amqplib>=1.0 (from kombu>=2.1.8,<2.2.0->celery)
Downloading amqplib-1.0.2.tgz (58Kb): 58Kb downloaded
Running setup.py egg_info for package amqplib
Successfully downloaded celery anyjson kombu python-dateutil amqplib
По общему признанию, это действительно оставляет некоторый мусор в виде временных файлов, но это действительно достигает цели. Если вы делаете это с помощью virtualenv (что и должно быть), очистка так же проста, как удаление <virtualenv root>/buildкаталога.
Причина этого в том, что метаданные не существуют за пределами setup.py, поэтому, в отличие от, например, с rpmили dpkgгде вы создаете индекс метаданных сверху и запрашиваете его, pipа pypiне работает таким образом. Поэтому мы должны пропустить каждое требование.
12
Я пытался, pip --no-install celeryно получаю сообщение об ошибке no such option: --no-install(пункт 1.2.1)
полковник Паник
4
Я думаю, он имел в видуpip install --no-install celery
энтропия
23
В моей версии pip (1.5.4) --no-installфлаг устарел.
Цзянь
4
Для 1.5.4 используйте pip install --download =. - сельдерей
no
-1
Команда pip install <package> --download <path>должна быть использована, как упомянуто в комментариях по @radtek, так как от 7.0.0 (2015-05-21), --no-установить, удаляются из pip. Это загрузит необходимые зависимости в <path>.
Как ни смешно, --downloadтоже устарел. Каноническая команда в настоящее время , как представляется , pip download <package> -d /tmp --no-binary :all:как предложено на карточном чат .
Сесил Карри,
-1
Другой вариант - использовать вспомогательный сценарий, подобный этому, который использует pip.req.parse_requirementsAPI для анализа requirements.txtфайлов и distutils.core.setupзамену для анализа setup.pyфайлов.
Я проголосовал против, потому что эта конечная точка json ненадежна. Для примера посмотрите boto3, required_dist имеет значение null, но это проект, который определенно имеет зависимости в метаданных .
Ответы:
Принятый ответ больше не актуален для более современных версий pip и не дает немедленного ответа без просмотра нескольких комментариев, поэтому я даю обновленный ответ.
Это было протестировано с версиями 8.1.2 , 9.0.1 , 10.0.1 и 18.1 .
Чтобы получить вывод, не загромождая текущий каталог в Linux, используйте
-d
сообщает pip каталог, в который загрузка должна помещать файлы.Лучше просто использовать этот сценарий с аргументом, являющимся именем пакета, чтобы получить в качестве вывода только зависимости:
#!/bin/sh PACKAGE=$1 pip download $PACKAGE -d /tmp --no-binary :all:-v 2>&1 \ | grep Collecting \ | cut -d' ' -f2 \ | grep -Ev "$PACKAGE(~|=|\!|>|<|$)"
Также доступно здесь .
источник
requirements.txt
использования этого:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
--no-binary :all:
это не лучшая идея. Проект, который поставлял только wheel, а не sdist, провалился.Посмотрите мой проект johnnydep !
Установка:
Пример использования:
$ johnnydep requests name summary ------------------------- ---------------------------------------------------------------------- requests Python HTTP for Humans. ├── certifi>=2017.4.17 Python package for providing Mozilla's CA Bundle. ├── chardet<3.1.0,>=3.0.2 Universal encoding detector for Python 2 and 3 ├── idna<2.7,>=2.5 Internationalized Domain Names in Applications (IDNA) └── urllib3<1.23,>=1.21.1 HTTP library with thread-safe connection pooling, file post, and more.
Более сложное дерево:
$ johnnydep ipython name summary -------------------------------- ----------------------------------------------------------------------------- ipython IPython: Productive Interactive Computing ├── appnope Disable App Nap on OS X 10.9 ├── decorator Better living through Python with decorators ├── jedi>=0.10 An autocompletion tool for Python that can be used for text editors. │ └── parso==0.1.1 A Python Parser ├── pexpect Pexpect allows easy control of interactive console applications. │ └── ptyprocess>=0.5 Run a subprocess in a pseudo terminal ├── pickleshare Tiny 'shelve'-like database with concurrency support ├── prompt-toolkit<2.0.0,>=1.0.4 Library for building powerful interactive command lines in Python │ ├── six>=1.9.0 Python 2 and 3 compatibility utilities │ └── wcwidth Measures number of Terminal column cells of wide-character codes ├── pygments Pygments is a syntax highlighting package written in Python. ├── setuptools>=18.5 Easily download, build, install, upgrade, and uninstall Python packages ├── simplegeneric>0.8 Simple generic functions (similar to Python's own len(), pickle.dump(), etc.) └── traitlets>=4.2 Traitlets Python config system ├── decorator Better living through Python with decorators ├── ipython-genutils Vestigial utilities from IPython └── six Python 2 and 3 compatibility utilities
источник
johnnydep
сама устанавливает зависимости.Если и только если пакет установлен, вы можете использовать
pip show <package>
. Ищите полеRequires:
в конце вывода. Ясно, что это нарушает ваше требование, но тем не менее может быть полезно.Например:
$ pip --version pip 7.1.0 [...] $ pip show pytest --- Metadata-Version: 2.0 Name: pytest Version: 2.7.2 Summary: pytest: simple powerful testing with Python Home-page: http://pytest.org Author: Holger Krekel, Benjamin Peterson, Ronny Pfannschmidt, Floris Bruynooghe and others Author-email: holger at merlinux.eu License: MIT license Location: /home/usr/.tox/develop/lib/python2.7/site-packages Requires: py
источник
Самое близкое, что вы можете получить с помощью pip напрямую, - это использовать
--no-install
аргумент:Например, это результат установки сельдерея:
Downloading/unpacking celery Downloading celery-2.5.5.tar.gz (945Kb): 945Kb downloaded Running setup.py egg_info for package celery no previously-included directories found matching 'tests/*.pyc' no previously-included directories found matching 'docs/*.pyc' no previously-included directories found matching 'contrib/*.pyc' no previously-included directories found matching 'celery/*.pyc' no previously-included directories found matching 'examples/*.pyc' no previously-included directories found matching 'bin/*.pyc' no previously-included directories found matching 'docs/.build' no previously-included directories found matching 'docs/graffles' no previously-included directories found matching '.tox/*' Downloading/unpacking anyjson>=0.3.1 (from celery) Downloading anyjson-0.3.3.tar.gz Running setup.py egg_info for package anyjson Downloading/unpacking kombu>=2.1.8,<2.2.0 (from celery) Downloading kombu-2.1.8.tar.gz (273Kb): 273Kb downloaded Running setup.py egg_info for package kombu Downloading/unpacking python-dateutil>=1.5,<2.0 (from celery) Downloading python-dateutil-1.5.tar.gz (233Kb): 233Kb downloaded Running setup.py egg_info for package python-dateutil Downloading/unpacking amqplib>=1.0 (from kombu>=2.1.8,<2.2.0->celery) Downloading amqplib-1.0.2.tgz (58Kb): 58Kb downloaded Running setup.py egg_info for package amqplib Successfully downloaded celery anyjson kombu python-dateutil amqplib
По общему признанию, это действительно оставляет некоторый мусор в виде временных файлов, но это действительно достигает цели. Если вы делаете это с помощью virtualenv (что и должно быть), очистка так же проста, как удаление
<virtualenv root>/build
каталога.источник
rpm
илиdpkg
где вы создаете индекс метаданных сверху и запрашиваете его,pip
аpypi
не работает таким образом. Поэтому мы должны пропустить каждое требование.pip --no-install celery
но получаю сообщение об ошибкеno such option: --no-install
(пункт 1.2.1)pip install --no-install celery
--no-install
флаг устарел.Команда
pip install <package> --download <path>
должна быть использована, как упомянуто в комментариях по @radtek, так как от 7.0.0 (2015-05-21), --no-установить, удаляются изpip
. Это загрузит необходимые зависимости в<path>
.источник
--download
тоже устарел. Каноническая команда в настоящее время , как представляется ,pip download <package> -d /tmp --no-binary :all:
как предложено на карточном чат .Другой вариант - использовать вспомогательный сценарий, подобный этому, который использует
pip.req.parse_requirements
API для анализаrequirements.txt
файлов иdistutils.core.setup
замену для анализаsetup.py
файлов.источник
Я цитирую альтернативное решение от @onnovalkering :
Также, если вы используете conda ( как предлагает @ShpielMeister ), вы можете использовать:
для отображения информации, включая зависимости для конкретной версии или:
для отображения информации, включая зависимости обо всех поддерживаемых версиях этого пакета.
источник
boto3
, required_dist имеет значение null, но это проект, который определенно имеет зависимости в метаданных .