Как вывести список зависимостей для библиотеки Python без установки?

Есть ли способ получить список зависимостей для данного пакета Python без предварительной его установки?

В настоящее время я могу получить список требований, но он требует установки пакетов. Например, я могу использовать pip для отображения информации об основных требованиях, но она не включает информацию о версии:

$ pip show pytest
Name: pytest
Version: 3.0.6
...
Requires: colorama, setuptools, py

Я пробовал библиотеку под названием pipdeptree это включает в себя гораздо лучший вывод по требованиям, но также требует установки пакетов

$ pipdeptree -p pytest
pytest==3.0.6
- colorama [required: Any, installed: 0.3.7]
- py [required: >=1.4.29, installed: 1.4.32]
- setuptools [required: Any, installed: 34.0.0]
  - appdirs [required: >=1.4.0, installed: 1.4.0]
...

В идеале я бы получил уровень детализации, который pipdeptree обеспечивает. Кроме того, будучи в состоянии произвести requirements.txt файл из питона wheel или из пипи с pip будет также достаточно.

РЕДАКТИРОВАТЬ:

Я смотрел на подобные вопросы. Они либо устарели, требуют установки, либо не содержат отдельных зависимостей для данного пакета, а только список окончательно загруженных пакетов после разрешения требований к зависимостям. Например, мне все равно, какой пип загружен package-2.3.4 Я бы лучше знал, что package>=2.1 было требованием.

3 ответа

Решение

PyPi предоставляет конечной точке JSON метаданные пакета:

>>> import requests
>>> url = 'https://pypi.org/pypi/{}/json'
>>> json = requests.get(url.format('pandas')).json()
>>> json['info']['requires_dist']
['numpy (>=1.9.0)', 'pytz (>=2011k)', 'python-dateutil (>=2.5.0)']
>>> json['info']['requires_python']
'>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*'

Для конкретной версии пакета добавьте дополнительный сегмент версии в URL:

https://pypi.org/pypi/pandas/0.22.0/json

Если вы не против установить conda, это может помочь вам:

$ conda info numpy=1.11.1 python=3.6.3 

Номера версий пакета или python являются необязательными (все версии будут описаны ниже)

На самом деле, conda дает вам два варианта для этого:

conda info {package}
conda install --dry-run {package}

Иногда я слышу, что последний установит пакет, если вы предоставите другие флаги, поэтому я бы использовал первый.

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