如何指定Python的确切版本作为虚拟环境要求的一部分[重复]

问题描述 投票:0回答:2

我正在使用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)。

如何确保我的同事安装正确版本的 Python 代码?例如,我可以在

requirements.txt
中放入一些东西来确保这一点吗?

python pip virtualenv
2个回答
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 是 pip3.7,来自复制到 venv 目录的 /usr/local/bin 目录。

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


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
中执行此操作,更多信息请参见防止包安装在旧 Python 版本上

请注意,如果您希望上述内容在 3.x 之后继续工作(因为 4.0 的次要版本将为 0,即 < 5), you might want to use:

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

但这假设 4.x 也将向后兼容您正在做的所有事情 - 根据您具体想要做什么,您可能也想为未来的版本破例。

© www.soinside.com 2019 - 2024. All rights reserved.