我想将系统Python从3.6.2升级到3.6.4以获得一个修复bug。这会破坏使用3.6.2创建的虚拟环境吗?
我想将系统Python从3.6.2升级到3.6.4以获得一个修复bug。这会破坏使用3.6.2创建的虚拟环境吗?
通常而言,答案是“这取决于情况”。
virtualenv
和 pipenv
工具会将所选择的 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
的原因之一。