我正在使用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 时,具有不同版本的 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 答案就是您想要做的。
通常,您的脚本应要求用户安装旧版本的 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 也将向后兼容您正在做的所有事情 - 根据您具体想要做什么,您可能也想为未来的版本破例。