如何在不安装的情况下列出 python 库的依赖项?
How to list dependencies for a python library without installing?
有没有办法在不先安装给定 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 wheel
或使用 pip
从 pypi 生成 requirements.txt
文件也足够了。
我对给定包的依赖性 约束 感兴趣,而不是解决依赖性要求后最终下载的包。例如,我真的不关心 pip 下载 package-2.3.4
,我宁愿知道 package>=2.1
是一个要求。
如果您不介意安装 conda,这可能对您有用:
$ conda info numpy=1.11.1 python=3.6.3
软件包或 python 的版本号是可选的(然后将描述所有版本)
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 {package}
conda install --dry-run {package}
我听说有时如果你提供其他标志,后者会安装包,所以我会使用前者。
有没有办法在不先安装给定 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 wheel
或使用 pip
从 pypi 生成 requirements.txt
文件也足够了。
我对给定包的依赖性 约束 感兴趣,而不是解决依赖性要求后最终下载的包。例如,我真的不关心 pip 下载 package-2.3.4
,我宁愿知道 package>=2.1
是一个要求。
如果您不介意安装 conda,这可能对您有用:
$ conda info numpy=1.11.1 python=3.6.3
软件包或 python 的版本号是可选的(然后将描述所有版本)
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 {package}
conda install --dry-run {package}
我听说有时如果你提供其他标志,后者会安装包,所以我会使用前者。