pip冻结输出中的未来安全版本号

时间:2014-03-19 09:18:00

标签: python deployment pip

如果我输入pip freeze > requirements.txt,结果文件看起来与此类似:

argparse==1.2.1  
h5py==2.2.0  
wsgiref==0.1.2

一些图书馆正在不断发展中。这件事发生在我身上,关于h5py,现在(在撰写本文时)版本2.2.1中可用。因此,使用pip install -r requirements.txt会抛出错误,说找不到h5py的版本2.2.0

No distributions matching the version for h5py==2.2.0 (from -r requirements.txt (line 2))

通过pip freeze来维持要求是否被视为良好做法?显然,我不能依赖将来仍然可用的特定版本号。我希望将来部署我的应用程序,即使它们已经使用了几年,但没有版本号的兼容性问题。有没有办法让pip freeze未来安全的输出?

我考虑使用大于符号pip freeze而不是等于符号{{1}来操纵>=的输出文件输出如下所示:

==

但我可以想象,如果任何库在未来版本中破坏向后兼容性,这将破坏我的应用程序。

1 个答案:

答案 0 :(得分:1)

要回答第一个问题,是的,使用pip冻结来管理需求是很常见的。如果项目打包,您还可以直接在setup.py文件中设置依赖项。

您可以将需求设置为大于或等于版本x,但正如您推测的那样,如果依赖关系对其api进行了更改以破坏您所需的功能,则可以转向并咬你。您还可以确保已安装的依赖项小于某个版本。即如果您使用的是1.0版的软件包,并希望进行小的更新,但主要版本会让您感到害怕(无论是否已发布),您可以要求示例> = 1.0.0,< 2.0.0

More info on requirements files

最后,pip freeze只是一个工具,可以向您展示您目前安装的内容,它不知道或关心它是否适合您。基于这些数据复制环境的用途并不重要;版本冲突,更新破坏向后兼容性,错误和依赖中的其他此类问题将(至少一次)导致您悲伤。密切关注项目的主要依赖状态并使用新版本进行自动化测试将为您节省大量时间和头痛(或至少令人头痛)。