Virtualenv和libpython

时间:2012-10-28 00:01:35

标签: python-3.x

我正在运行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需要的库吗?

1 个答案:

答案 0 :(得分:0)

Virtualenv直接取决于创建它们的python运行时,因此当您删除运行时时,virtualenv也将停止工作。

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

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

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

我通过在Cloud9上构建Python 3.7运行时进行了所有测试,并为此获得了pipenv。然后我删除了该文件,并使用pipenv在同一安装目录中构建了Python 3.5运行时。然后我也删除了它,并类似地构建了Python 3.8。最终,我同时通过pipenv安装了Python 3.7和3.8。