pip冻结没有已安装包的依赖关系

Tom*_*ner 25 python pip requirements.txt

当我这样做时,pip freeze我得到了我明确安装的软件包以及那些软件包依赖的软件包.

例如:

$ pip install fabric
...
$ pip freeze
Fabric==1.0.1
paramiko==1.7.6
pycrypto==2.3
Run Code Online (Sandbox Code Playgroud)

好的,但后来我又在另一个环境中安装了这个requirements.txt,pip install我得到了相同的结果,删除了最后两行.

所以我的问题是:如何创建最简化的requirements.txt,其中所有可计算的依赖关系都没有显示?

rba*_*ffy 28

现在有(免责声明:我做到了).

您只需pip-chill从PyPI 安装并pip-chill从Python环境运行即可.

如果您喜欢冒险并且不想固定版本(或者想要使用pip-compile),那么您可以使用pip-chill --no-version并且它将为您提供当前环境的最低要求.

https://github.com/rbanffy/pip-chill

  • 这应该合并到 pip 本身中。谢谢! (4认同)
  • 这正是我所要求的!谢谢。 (2认同)
  • 这很好。想要添加有价值的改进吗?添加固定最小值和小于下一个主要的功能,这意味着将 `pkg==1.2.3` 转换为 `pkg>=1.2.3,<2` (2认同)

Hug*_*res 12

没有办法用pip创建"最简化的requirements.txt" - 我不知道在这种情况下你是否需要它.

最好在requirements.txt中包含所有包,因为您确定哪些依赖项版本适用于您的环境.

想想paramiko得到更新,并打破向后兼容性:你会遇到问题.

  • 我不认为`所有包'都是正确的.由于`pip install -r requirements.txt`会自动安装依赖,我们只需要root/original包. (3认同)
  • @NamGVU:我说“拥有所有软件包很好”,而不是说它是必须的。指定所有包是一个很好的做法,因为您可以更好地控制您的环境。考虑一个给定的包 A,它依赖于 B==1.0.0,而 B 依赖于 C(任何版本)。包 A 只需要求 B==1.0,但如果出于任何原因包 C 以向后不兼容的方式更新,包 A 可能会遇到麻烦(因为它没有指定保证包 C 的哪个版本可以工作)。因此,A 指定 B==1.0.0 **和经过测试且您知道它有效的 C 版本是**安全的**。 (2认同)
  • @NamGVU:Python世界并不完美,很多时候人们没有为他们的直接依赖指定严格的版本.我已经看过很多次这个问题.想到的一个案例是`python-statsd`**错误地指定`mock`(没有固定版本)作为依赖,突然最新版本的`mock`需要不同版本的`setuptools` .我的一些服务器坏了,因为他们使用`python-statsd == 1.6.0`而没有指定完整的依赖关系层次结构.请参阅https://git.io/vPWIW和https://github.com/testing-cabal/mock/issues/261 (2认同)

小智 8

我认为删除版本的简单方法是-d"=" -f1在运行后删除pip freeze

pip3 freeze | cut -d"=" -f1 
Run Code Online (Sandbox Code Playgroud)