Python的requirements文件必须指定版本吗?

83

我有一个 Python 代码库的 requirements.txt 文件。该文件包含了所有的规格要求:

pytz==2017.2
requests==2.18.4
six==1.11.0

我正在添加一个新的包。我应该列出它的版本吗?如果是,我该如何选择具体的版本?


你在使用虚拟环境吗? - Toms Code
你恰好遇到了Python中一个有争议的辩论。你不一定要这样做,是否需要取决于你的应用程序。你能描述一下你想做什么吗? - pylang
@Tom Mac 是的,但出于好奇,你为什么问呢? - Intrastellar Explorer
@pylang 我只是想知道,我试图遵循最佳实践。这个应用程序是制造自动化 - 在这种情况下,是用Python编写的驱动程序。 - Intrastellar Explorer
@Intrastellar Explorer 我本来想建议你在 pip freeze 之前使用一个,但你已经解决了。 - Toms Code
3个回答

51

查看pip文档以获取更多信息,但基本上您不需要指定版本。这样做可能会避免麻烦,因为指定版本可以确保您不会陷入依赖关系地狱。

请注意,如果您正在创建要部署和pip安装的软件包,则应使用install-requires元数据而不是依赖于requirements.txt。

此外,养成使用虚拟环境的习惯以避免依赖问题尤其重要,特别是在开发自己的东西时。 Anaconda提供了一个简单的解决方案,使用conda create命令,而virtualenvvirtualenvwrapper非常适合轻量级解决方案。另一种解决方案pipenv也很受欢迎。


35
指定版本并不是必需的,但在未来会有很大帮助。某些软件包的版本与其他软件包及其相应版本不兼容。很难预测未来的变化将如何影响这些相互关系。因此,在您的requirements.txt文件中创建一个时间快照非常有益,以显示哪些版本的相互关系是有效的。
要创建一个包含您正在使用的软件包版本的requirements.txt文件,请执行以下操作。在您的控制台/终端中,进入您希望requirements.txt文件位于的位置,并输入:
pip freeze > requirements.txt

这将自动生成一个 requirement.txt 文件,其中包含您安装的包及其各自的版本。

提示:您应该为每个项目使用虚拟环境。这样可以为您创建一个“隔离的空间”,在其中安装特定的软件包版本,而不会影响其他项目。这将在未来节省很多麻烦,因为您的软件包和版本将保持项目特定。我建议使用Python 的 'venv' 系统


1
喜欢这个答案,我不知道如何检查我目前拥有的所有版本。谢谢。 - Denys Fiialko
很高兴能帮到你,@DenysFiialko!如果您不想创建文本文件,您也可以在控制台/终端中键入“pip freeze”(不需要键入“> requirements.txt”)来列出软件包版本。 - Toms Code

10

没有必要指定版本号,但是指定一个版本号可能是个好主意。

如果你想指定一个版本号,但不确定该指定哪个版本,请尝试使用pip freeze命令,它可以显示出你当前已安装的所有软件包及其版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接