web-dev-qa-db-ja.com

インストールせずに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からのファイル、またはpipを含むpypiからのファイルでも十分です。

編集:

similar の質問を見てきました。古くなっている、インストールが必要である、または特定のパッケージのindividual依存関係をリストせず、解決後の最終的にダウンロードされたパッケージのリストのみ依存関係の要件。たとえば、pipがダウンロードされても気にしないpackage-2.3.4、私はむしろpackage>=2.1は要件でした。

21
Brendan Abel

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
6
onnovalkering

Condaのインストールを気にしなければ、これでうまくいくでしょう:

$ conda info numpy=1.11.1 python=3.6.3 

パッケージまたはpythonのバージョン番号はオプションです(すべてのバージョンについては後で説明します)

2
ShpielMeister

実際、condaには、このための2つのオプションがあります。

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

他のフラグを指定すると、後者がパッケージをインストールする場合があると聞いています。そのため、前者を使用します。

0
Adam Erickson