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

Posted

技术标签:

【中文标题】如何在不安装的情况下列出python库的依赖项? [复制]【英文标题】:How to list dependencies for a python library without installing? [duplicate] 【发布时间】:2017-06-08 13:45:42 【问题描述】:

有没有一种方法可以在不先安装的情况下获取给定 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 或从 pypi 使用 pip 生成 requirements.txt 文件也足够了。

我对给定包的依赖约束感兴趣,而不是解决依赖要求后最终下载的包。例如,我并不关心 pip 下载了package-2.3.4,我宁愿知道package>=2.1 是一个要求。

【问题讨论】:

我不知道你为什么得到-1!无论如何,假设您使用 pip 安装 matplotlib。大概 pip 会验证它是否具有使 matplotlib 成功运行所需的库版本。因此,如果您要问,pip 如何知道要为任何给定库安装哪些版本的需求,是否更有可能得到答案? @BillBell 这个问题的答案会给我部分解决方案。目前,在 python 中指定需求有些支离破碎。对于***,我可以查看METADATA 文件并解析出Requires-Dist 部分。对于遗留的tar.gz 源代码发行版,它就不太清楚了。我要么必须解析 requirements.txt 文件,要么尝试解析 setup.py 文件。但是pip 和其他库已经这样做了,所以如果我可以重用他们用来获取信息的任何逻辑,那就太好了。 我认为这里有答案:***.com/questions/11147667/… 【参考方案1】:

如果您不介意安装 conda,这可能对您有用:

$ conda info numpy=1.11.1 python=3.6.3 

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

【讨论】:

这是弃用的。现在我们需要使用: conda search numpy=1.11.1 --info【参考方案2】:

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

【讨论】:

我投了反对票,因为这个 json 端点不可靠。以boto3 为例,requires_dist 为空,但这是certainly has dependencies in the package metadata 的项目。【参考方案3】:

实际上,conda 为您提供了两种选择:

conda info package
conda install --dry-run package

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

【讨论】:

以上是关于如何在不安装的情况下列出python库的依赖项? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不安装的情况下修改 package.json 依赖项

如何在不更新依赖项 SonataUserBundle 的情况下安装 FOSUserBundle dev-master?

Python:在不依赖枕头库的情况下旋转图像?

如何在不使用任何插件的情况下将非 maven 依赖项安装到您的 maven 项目中? [复制]

列出python包依赖项而不加载它们?

有没有办法列出 pip 依赖项/要求?