繁体   English   中英

如何指定python的确切版本作为虚拟环境要求的一部分

[英]How to specify exact version of python as part of virtual environment requirements

我试着看看这是否重复,但无法找到这个问题。 对于这些东西,我也很无知。

我正在使用Python 3.7.2(我的Windows 10计算机上唯一的python版本)并使用venv创建了一个虚拟环境:

python -m venv / path / to / new / virtual / environment

我通过pip install添加了一些软件包,并通过pip freeze创建了一个requirements.txt文件。 我使用虚拟环境中的包编写了一些代码。

我想与同事分享我的代码。 我可以给他们代码和需求文件,但requirements.txt没有指定我使用的python版本(3.7.2)。 将此信息传达给同事的适当机制是什么? 可以修改requirements.txt文件以包含我使用3.7.2的事实,并且运行我的代码的任何人也应该使用3.7.2吗? 这个问题的答案取决于我或我的同事是否在我们的计算机上安装了多个版本的python?

通常,您的脚本应该要求用户安装旧版本的Python。 Python很少会破坏向后兼容性(比如从2.x到3.x),因此确实没有必要指定3.x的特定版本

当然,你的同事的版本可能太旧了,在这种情况下他们应该升级。 您的脚本可以简单地检查是否有足够新版本的Python可用:

import sys

if sys.version_info.major < 3 or sys.version_info.minor < 5:
    print("Python version 3.5 or newer required.")
    exit(1)

只需确保您知道为什么需要特定版本。 如果您的同事安装了足够的最新版本并且他们从requirements.txt安装了软件包,那么软件包管理器将自动安装适合其当前Python版本的软件包版本,并假设这些版本是维护良好的软件包,它们也应该向后兼容。 如果没有,您可以在requirements.txt指定软件包的特定版本。

如果您共享的内容本身就是一个包,您可以在setup.py执行此操作,更多内容防止在旧的Python版本上安装包

请注意,如果您希望上述内容继续超过3.x(因为4.0的次要版本将为0,即<5),您可能希望使用:

if sys.version_info < (3, 5):
    etc.

但是这假设4.x将向后兼容您正在做的所有事情 - 取决于您具体要做的事情,您可能也希望为将来的版本制作例外。

当你拥有一个具有多个python版本的系统时,使用不同版本的python的Venv更为重要。 例如,CentOS 7 EPEL安装了python 2.7和python 3.4。 当您尝试查找更新版本时,无法在官方存储库中找到它。 这是因为长期支持模型将某些嵌入式工具固定到特定版本,并且仅为错误修复提供支持。 3.4.1可以是初始版本,但3.4.2和3.4.3有更新。 那么你如何使用3.5或3.6或3.7? 您从源构建它并将其安装在备用位置(/ usr / local / bin或/ usr / opt / bin)。

Venv真正闪耀的地方。

从常规提示中,python3将调用python3.4并且python将调用2.7。

但是你可以使用你选择的python进行开发。

示例:您在alt位置安装python3.7。 系统python没有改变,所有系统实用程序都按预期工作。

/usr/local/bin/python3.7 -m venv mypython_dir创建一个新的虚拟环境。

source mypython_dir / bin / activate将激活该环境

从那时起,python是python3.7,pip是从/ usr / local / bin目录中的pip3.7,它被复制到venv目录中。

在Windows上,这不是一个问题,因为python没有嵌入系统级别。 对于Linux系统,你会看到很多问题,人们迫使他们在LTS版本上升级到系统python。 坏事发生了。 如果您想要或需要特定版本来运行您的模块,那么Grismar的上述答案就是您想要做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM