在 Requirements.txt 文件中指定 Virtualenv 使用的 Python 版本。

35

我正在使用 virtualenv 与团队开发 Django 应用程序。我们部署的服务器正在运行 Python 2.6,但我们机器的默认版本是 2.7.3。是否有办法在 requirements.txt 文件或代码库中指定 Python 版本?

我知道 requirements.txt 是pip的一部分,而Python版本是virtualenv的一部分,但如果不必告诉每个新加入团队的人如何设置他们的virtualenv,那将非常方便。


2
我不理解你提问的动机是什么。你的代码是写给2.6还是2.7的?如果它不是为2.6编写的,显然它在你的服务器上不会起作用,所以我不知道你想做什么 :)。假设它是为2.6编写的,只需记录它是2.6+,并且没有必要特别指定在创建venv时使用2.6,如果有人使用2.7,那又怎样呢? - Julian
2
代码是为了2.6编写的,因为服务器需要它。它应该有文档记录,但我想通过virtualenv强制使用2.6,然后告诉人们它支持2.6+,希望他们彻底阅读Python文档。 - Arion
1
这个问题已经在这里得到了回答:https://dev59.com/0mIk5IYBdhLWcg3wIq9U#33451105 - 0 _
6个回答

17

pip和virtualenv都不会安装python(虽然pip尝试)。它们使用你指定的任何版本。

你可以编写一个README文件,提到所需的Python版本,或提供一个fabric脚本,可以在本地部署并在那里指定版本。例如,安装virtualenv、pip、distribute的说明

对于那些不阅读说明的人,可以使用CI系统(jenkinsbuildbot),使用支持的Python版本运行单元测试(提交前/后)。

要管理多个Python安装,可以使用类似pythonz的东西。


8
你不能将它放在requirements.txt中,但你可以在脚本顶部添加这段代码:
import sys
if sys.version_info[0:2] != (2, 6):
    raise Exception('Requires python 2.6')

3

每次有新成员加入团队时都要告诉他们如何设置虚拟环境真的很麻烦。

将设置虚拟环境的步骤添加到你给新成员的常规指导中,就像在告诉他们内部文档wiki、wifi密码和三明治外卖店电话号码的同一位置。

如果不告诉人们如何设置虚拟环境并让他们自己解决,这将非常不方便;第一次提交使用collections.Counter的代码时,发现由于服务器没有2.7.x版本而导致构建失败。


3
那是备选计划,但我更希望针对编程问题找到程序化的解决方案。 - Arion
我不确定这是否符合编程问题的标准;这只是文档/入职问题。如果你必须,你可以在部署脚本/钩子中添加一个检查来验证Python版本;但那又有什么意义呢?即使版本不匹配-你的代码仍然可能运行。您需要检查您的代码是否使用了在2.7中引入的功能,对于这一点我不知道是否有自动化的方法。 - Burhan Khalid
2
我不确定这是否属于编程问题;这只是文档/入职问题。按照这个逻辑,你根本不应该有 requirements.txt,因为人们可能会认为它是库的最新版本,并使用在实际使用的版本中不存在的库功能。此外,如果你没有单元测试(在你的例子中会出错),那么你玩的游戏本来就很冒险。 - semicolon

0
根据您的评论,这里唯一的问题应该是确保没有2.7专有代码进入您的代码库。为此,我建议使用{{link1:tox}},并将其配置为创建一个2.6环境进行测试,这样当您的同事运行您的测试套件时,测试将在2.6虚拟环境中运行。

0

你也可以通过这个命令指定默认的Python版本:

sudo update-alternatives  --set python /usr/bin/python3.7

0

无法使用pip自动生成Python版本。但是,如果您考虑使用conda来管理Python环境和依赖项,您可以创建一个名为environment.yml的文件,其中包括所有依赖项和项目中使用的Python版本。要生成environment.yml文件,请使用以下命令:

conda env export > environment.yml

这将在当前目录中创建一个environment.yml文件,其中包含所有已安装的软件包及其特定版本的列表,以及您项目中使用的Python版本。

要从environment.yml文件创建新环境,请使用以下命令:

conda env create -f environment.yml

这将创建一个新的 conda 环境,具有与原始环境相同的依赖项和 Python 版本。


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