当我执行pip冻结时,我看到了大量的Python包,我没有明确安装,例如
$ pip freeze
Cheetah==2.4.3
GnuPGInterface==0.3.2
Landscape-Client==11.01
M2Crypto==0.20.1
PAM==0.4.2
PIL==1.1.7
PyYAML==3.09
Twisted-Core==10.2.0
Twisted-Web==10.2.0
(etc.)
Run Code Online (Sandbox Code Playgroud)
有没有办法让我确定为什么pip安装了这些特定的依赖包?换句话说,如何确定将这些包作为依赖项的父包?
例如,我可能想要使用Twisted,我不想依赖于包,直到我知道更多关于不小心卸载或升级它.
如何以编程方式获取Python包的依赖项列表?
标准setup.py有这些记录,但我找不到从 Python或命令行访问它的简单方法.
理想情况下,我正在寻找类似的东西:
$ pip install somepackage --only-list-deps
kombu>=3.0.8
billiard>=3.3.0.13
boto>=2.26
Run Code Online (Sandbox Code Playgroud)
要么:
>>> import package_deps
>>> package = package_deps.find('somepackage')
>>> print package.dependencies
['kombu>=3.0.8', 'billiard>=3.3.0.13', 'boto>=2.26']
Run Code Online (Sandbox Code Playgroud)
注意,我不是在谈论导入包和查找所有引用的模块.虽然这可能会找到大多数依赖包,但它无法找到所需的最小版本号.那只存储在setup.py中.
有没有办法获得给定python包的依赖项列表而不先安装它?
我目前可以获得要求列表,但它需要安装包.例如,我可以使用pip来显示基本需求信息,但它不包含版本信息:
$ pip show pytest
Name: pytest
Version: 3.0.6
...
Requires: colorama, setuptools, py
Run Code Online (Sandbox Code Playgroud)
我已经尝试过一个名为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]
...
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会得到pipdeptree提供的详细程度.此外,能够requirements.txt从python wheel或pypi 生成文件pip也足够了.
编辑:
我看过类似的问题.它们要么过时,需要安装,要么它们不列出给定包的单个依赖项,只列出解决依赖性要求后最终下载的包的列表.例如,我并不关心pip下载package-2.3.4,我宁愿知道这package>=2.1是一个要求.
我使用virtualenv版本1.7.1.2与python2.7.3创建虚拟python环境.但是当我创建这样的环境并激活它时,我可以看到安装了以下软件包(使用pip freeze):
argparse==1.2.1
distribute==0.6.24
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)
这是为什么?那是什么意思?
我试图在我的机器上运行一个代码库,而pip找不到一些依赖项。好像是在另一台机器上找到它们,所以我想看看两台机器上正在使用哪个回购点。
我怎样才能做到这一点?
有时我需要在conda环境中安装纯pip软件包。如果我使用安装软件包pip install,那么即使panda可以使用它们,该软件包的所有依赖项也会使用pip安装。
我想通过conda安装尽可能多的软件包,所以目前我使用黑客工具通过pip获取软件包依赖项列表,在conda上搜索所有conda install已找到的依赖项,然后通过找到pip install。
我更喜欢通过conda而不是pip安装依赖项吗?如果是这样,谁能想到一种更优雅的方式来解决此问题?
我需要类似以下内容:
pip showrequirements tensorflow
Run Code Online (Sandbox Code Playgroud)
这将返回一些允许我解析所需软件包名称和所需版本的内容:
astor>0.6, tensorboard>1.0.11, etc.
Run Code Online (Sandbox Code Playgroud)
pip 在安装和下载命令期间以某种形式获取此信息。我可以在代码中看到它发生的地方……但是在我破解使用 pip 内部代码的方法之前,是否有任何简单的 API 或现有库可以做到这一点?
编辑:我无法安装软件包来查看此内容,因此 pip show 将不起作用。一种(hacky)解决方案是解析 pip 下载的输出。
谢谢!