如何在不安装的情况下列出python库的依赖项?

时间:2017-01-23 22:17:53

标签: python pip python-packaging

有没有办法获得给定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提供的详细程度。此外,能够从python requirements.txt或使用wheel的pypi生成pip文件也足够了。

编辑:

我查看了similar个问题。它们要么已过时,要么需要安装,要么它们不会列出给定包的个别依赖关系,而是仅在解析依赖关系要求后列出最终下载的包。例如,我并不关心pip已下载package-2.3.4,我宁愿知道package>=2.1是必需的。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

如果你不介意安装conda,这可能适合你:

$ conda info numpy=1.11.1 python=3.6.3 

包或python的版本号是可选的(然后将描述所有版本)

答案 2 :(得分:0)

实际上,conda为此提供了两个选择:

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

我听说有时如果您提供其他标志,后者会安装该软件包,所以我会使用前者。