5

我正在运行 arch,在我之前设置的项目中,我使用 virtualenv 设置了一个小 python 沙箱。此时我盒子上的默认 python 版本是 3.2 它已经升级到 3.3,但是当我进入我的(现在是旧的)virtualenv 并尝试运行 python 时,我得到了错误:

python: error while loading shared libraries: libpython3.2mu.so.1.0: cannot open shared object file: No such file or directory

这是我可以解决的问题,以便将来如果/当我升级我的 python 时,我最终不会丢失旧 virtualenv 需要的库?

4

1 回答 1

0

Virtualenvs 直接依赖于创建它们的 python 运行时,因此当您删除运行时时,virtualenv 也会停止工作。

解决方案是使用pipenv而不是包,因为它在顶级文件夹中virutalenv名为Pipfile的文件中包含项目的所有依赖项。Arch Linux 中有一个 pipenv。对于独立的 python 安装,可以使用pip3 install pipenv.

每当 Python 被替换(或者在您的情况下升级)时,您必须删除以前pipenv --rm在环境所在目录中使用的 virtualenv。但是在升级 Python 之后,您必须手动编辑 Pipfile 以python_version = "3.7"从文件中删除(或任何版本)行,因为这会导致pipenv shellpython3在旧环境被删除后其中的调用失败。

请注意,在此方法中,virtualenv 仍与您运行的 python 版本相关联pipenv shell。如果您同时安装另一个 python 版本,为其安装 pipenv 包并尝试运行pipenv shell,它将使用创建它的 virtualenv(第一个 python 运行时)的 python 运行时。

我通过在 Cloud9 上构建 Python 3.7 运行时测试了所有这些,并获得了 pipenv。然后我删除了它并使用 pipenv 在同一安装目录中构建了一个 Python 3.5 运行时。然后我也删除了它并类似地构建了 Python 3.8。最后,我安装了 Python 3.7 和 3.8,两者都使用 pipenv。

于 2019-12-23T15:07:38.590 回答