如何更改已存在的virtualenv中的Python版本?

19

我使用Python 3.6创建了一个虚拟环境,之后进行了系统升级,并安装了系统范围内的Python 3.7。现在我无法在该虚拟环境中执行Python文件,因为它正在寻找Python 3.6。

如何升级虚拟环境中的Python版本以匹配系统范围内的版本,或者如何降级特定虚拟环境中的Python版本?

我正在使用manjaro操作系统。

1个回答

16

编辑 1

进行了一些测试并找到了另一种更“优雅”的至少更新可执行文件的方法。假设虚拟环境最初是这样创建的virtualenv -p /path/to/my/python2.7 .venv。可以通过以下方式将可执行文件更新为特定的Python版本:virtualenv --clear -p /path/to/my/python3.6 .venv。请使用ls -la .venv/bin/python验证.venv/bin/python中的python符号链接是否已更新。旧的可执行文件仍将位于./venv/bin/中。

注意:您需要安装特定目标版本的Python。


请参阅此链接,该链接对其进行了很好的解释。

Virtualenvwrapper带有一些方便的命令来管理您的虚拟环境。

更改Python版本:

  1. 取消当前环境会话。

  2. 如果安装了许多软件包或库,则最好创建一个requirements.txt文件。必要时记得编辑版本。

  3. 使用包装程序命令删除虚拟环境:rmvirtualenv

    • 这将删除虚拟环境,但保留您的项目文件。
  4. 使用想要的Python版本创建新的虚拟环境。

    • 示例:mkvirtualenv -p python3 环境名称

    • 您可以使用-p标志和版本指定Python版本,如果您有一个requirements.txt文件,可以使用-r requirements.txt来指定它。

    • 现在将新的虚拟环境绑定到您的项目目录。您可以指定完整路径,但是更容易激活新的虚拟环境并在您的项目目录中运行该命令:

    • 示例:setvirtualenvproject

      请告诉我/我们,这个答案是否对您有帮助!

4
感谢您快速回复。由于某些原因,我无法使用virtualenv包装程序,但我所做的是手动删除虚拟环境中的bin/、include/和lib/文件夹,然后只需运行virtualenv -p python3 env即可。 - dAn
@dAn 很高兴听到它对你有用! - tahesse
1
听起来比删除并重新创建一个新的虚拟环境更麻烦。 - dtc
2
据我所知,这不是一个很好的答案,因为(1)当Python升级时,您将失去创建新的requirements.txt文件的能力(如果这不是真的,请解释如何做到这一点); (2)这似乎是“粉碎旧的虚拟环境并重新构建它”的答案,这是一个相当不令人满意的答案。 - Robert P. Goldman
@RobertP.Goldman 在我看来,(1)并不可行。我们只需要手动更新依赖并保证与新的Python可执行文件兼容即可。据我所知,没有其他方法可以做到这一点。至于(2),大多数情况下都是这样的......甚至可以“优雅”地解决(请参见我的EDIT 1)。 - tahesse
生成一个 requirements.txt 是个好主意。我尝试了一些方法但失败了。所以,我必须重新构建一个新的 venv 并导入 requirements.txt - Allis Gao

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