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

时间:2019-06-19 01:48:58

标签: python pip virtualenv

我试图查看这是否重复,但无法准确找到此问题。我对这些东西也一无所知。

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

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

我通过pip安装添加了一些软件包,并通过pip冻结创建了requirements.txt文件。我使用虚拟环境中的程序包编写了一些代码。

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

2 个答案:

答案 0 :(得分:0)

通常,您的脚本应要求用户安装较旧版本的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中进行操作,更多内容请参见Prevent package from being installed on old Python versions

请注意,如果您希望以上内容继续在3.x以后运行(因为4.0的次要版本将是0,即<5),则可能需要使用:

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

但是,这假设4.x也可以向后兼容您所做的所有事情-根据您要进行的具体工作,您可能还希望对以后的版本作一个例外。

答案 1 :(得分:0)

当您的系统具有多个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是复制到venv目录中的/ usr / local / bin目录中的pip3.7。

在Windows上,这不是一个大问题,因为python未在系统级别嵌入。您会在Linux系统上看到很多问题,在Linux系统上,人们已强迫在LTS版本上升级到系统python。坏事发生了。如果您想要或需要特定版本来运行模块,那么上面的格里斯玛答案就是您想要做的。