滚动发行版(Arch)上的 Python 虚拟环境

滚动发行版(Arch)上的 Python 虚拟环境

我非常喜欢滚动分发模型。我确实需要帮助解决一个小问题。当我在 Python 中创建一个虚拟环境来隔离一个项目时,一切都运行良好,直到我的滚动发行版升级 Python 版本。

当这种情况发生时,我的 Python 项目不再有效,所以我销毁了我的 venv 并创建一个新的。看来我不应该采取如此激进的方法。这需要一段时间,而且随着项目数量的增加,这种方法的扩展性并不好。

以下是我创建 venvs 的方法:

$ python -m venv venv
$ source venv/bin/activate
$ command -v python
$ python -m pip install --upgrade pip
$ python -m pip install django     # or whatever
$ python --version && python -m django --version
  1. 我创建 venv 错误了吗?
  2. 如果升级系统的 python 破坏了我的 venvs,是否有一种优雅的方法来修复而不是仅仅重新创建 venv?

答案1

假设在 python3.10 发布之前,使用 python3.9 创建了一个 venv。venv 将创建一个符号链接到系统 python 的 bin 目录,如下所示。 venv/bin/python3 -> /usr/bin/python3此未版本化的 python 二进制文件本身可能没有问题。但是,site-packages 目录是特定于主要版本的,这会使您的 python3.9 项目不再有效。

我认为 venvs 是给定 Python 版本和已安装库的不可变集合。当发生重大变化时,销毁并重新创建似乎是合理的。它们是轻量级的。当然,我不需要像你一样反复这样做。考虑改进你的自动化,这样你就可以根据需要一次重建所有这些。

Arch 并不希望长期维护 Python,因为他们采用滚动发行版概念。也许您可以找到并接受用户贡献的软件包,比如 AUR 上的 python39,但也许不行。考虑切换到长期支持发行版,这样您就有更多的时间使用给定的 Python 主要版本。可以局限于容器或其他任何东西,不需要替换您喜欢的 Arch 的所有功能。

相关内容