Как перечислить зависимости для библиотеки 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
из python wheel
или из pypi с pip
.
EDIT:
Я рассмотрел похожие вопросы. Они либо устарели, либо требуют установки, либо не перечисляют отдельные зависимости для данного пакета, а только список конечных загруженных пакетов после разрешения требований зависимости. Например, мне все равно, что pip загружен package-2.3.4
, я бы предпочел, чтобы это требование было package>=2.1
.
Ответы
Ответ 1
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
Ответ 2
Если вы не против установки conda, это может сделать трюк для вас:
$ conda info numpy=1.11.1 python=3.6.3
Номера версий пакета или python являются необязательными (все версии будут описаны ниже)
Ответ 3
На самом деле, conda
дает вам два варианта:
conda info {package}
conda install --dry-run {package}
Иногда я слышу, что последний установит пакет, если вы предоставите другие флаги, поэтому я бы использовал первый.