使用“-m venv --upgrade”在虚拟环境中升级 python

Upgrade python in a virtual environment with '-m venv --upgrade'

我有多个 python 版本由 pyenv 管理。我想使用“—upgrade”选项将我的一个虚拟环境从 3.7.13 升级到 3.10.3:

>deactivate 
>pyenv local 3.10.3 
>python3 -m venv --upgrade .venv 
>. .venv/bin/activate 
> python -V 
Python 3.7.13

我预计“—升级”会将 python 版本更改为 3.10.3,但它并没有保留在 3.7.13

我知道丢弃并重新创建虚拟环境可能更容易,但我真的很想了解“—升级”应该如何工作

如果您阅读 the official documentation of the venv module,那么 --upgrade 选项的描述非常具体:“...假设 Python 已升级 in-place。”我认为这意味着它必须与您最初创建虚拟环境时使用的 Python 安装相同,才能使 --upgrade 标志起作用。 pyenv 安装的 Python 的每个版本都是单独安装的,所以我不希望 --upgrade 标志在这种情况下起作用。

话虽这么说,据我所知,venv 只不过安装了几个基本脚本和配置文件,以及一些符号链接。 source code of the venv module 看起来相当简单,而 --upgrade 开关所做的只是跳过设置脚本。我认为您可以通过更改一些符号链接并在这里和那里更改一些目录名称来手动“破解”您的方式。但是,这不是 venv 的使用方式。

所以,是的,避免痛苦,丢弃旧的虚拟环境,只构建一个新的。