一个patchlevel升级后,virtualenv还能正常工作吗?

3

我想将系统Python从3.6.2升级到3.6.4以获得一个修复bug。这会破坏使用3.6.2创建的虚拟环境吗?


我相信在每个虚拟环境中都会创建一个新的Python可执行文件,因此您的虚拟环境将继续在3.6.2中运行,但我对此不太确定,建议您在没有更多指导的情况下前进。 - ChootsMagoots
1个回答

2

通常而言,答案是“这取决于情况”。

virtualenvpipenv 工具会将所选择的 Python 版本复制到 env/bin/ 目录下。这就意味着虚拟环境将无法接收到尾缀版本(point-releases)的更新。

$ file env/bin/python3
env/bin/python3: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)

推荐使用的venv(以前称为pyvenv)工具(在Linux上)创建了一个符号链接,指向它所执行的Python版本(可以将其视为文件系统的“重定向”)。这意味着,如果原始可执行文件被替换,虚拟环境将自动接收点发行版:

$ file env/bin/python3.6
env/bin/python3.6: symbolic link to /usr/bin/python3.6

这种行为是可调整的,venv还可以在原地升级版本,即使不使用符号链接:

$ python3.6 -m venv -h
[...]
  --symlinks            Try to use symlinks rather than copies, when symlinks
                        are not the default for the platform.
  --copies              Try to use copies rather than symlinks, even when
                        symlinks are the default for the platform.
  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.
  [...]

据我了解,virtualenv工具似乎没有这样的功能,这可能是现在建议使用venv的原因之一。

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