Python - Virtual Environment uses System Directories Python的虚拟环境使用系统目录

15 浏览
0 Comments

Python - Virtual Environment uses System Directories Python的虚拟环境使用系统目录

我创建了一个Python虚拟环境,并通过以下方式激活它:

joe@joe-mint $ source ./venvs/deep-learning/bin/activate

这会将提示符变成:

(deep-learning) joe@joe-mint $

现在,每当我运行一个Python包或尝试安装一个包时,系统似乎忽略了它在虚拟环境中的事实,并在系统范围内进行操作:

(deep-learning) joe@joe-mint $ which pip
/usr/local/bin/pip

当我尝试安装不在我的系统上的新包时,情况也是一样的;它们被安装到系统文件(即/usr/bin)而不是虚拟环境中。

我的虚拟环境出了什么问题?如何使它忽略系统文件并在环境内完成所有操作?


我查看了这个问题,其中提到可以在创建虚拟环境时使用一个显式标志,以使其使用本地环境包。但是我使用python-3.5 -m venv创建虚拟环境,而这个标志在这个版本中被移除了,因为它现在是默认选项。

我还查看了这个问题,并确认虚拟环境的activate文件中的VIRTUAL_ENV变量设置正确。

0
0 Comments

问题出现的原因是:如果在没有本地pip安装的虚拟环境上运行pip命令,它默认使用虚拟环境外部系统的pip。即使已激活虚拟环境,它也会尝试在系统中安装包而不是在虚拟环境中安装。

解决方法如下:

首先,由于存在一个长期未解决的错误,我不得不在没有pip的情况下安装虚拟环境。

其次,按照指示在虚拟环境中安装pip。然而,这样做需要使用一些临时文件夹,由于某种原因,我的用户没有访问权限。因此,这个过程失败了,我唯一能让它工作的方法是以root身份运行。

sudo su
activate ..../venvs/deep-learning/bin/activate
curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python

尽管`which pip`现在指示使用了正确的pip(在虚拟环境中),但运行pip命令仍然使用系统的pip!通过取消激活(deactivate)和重新激活虚拟环境来解决这个问题。

现在,我花了一些时间才意识到以root身份安装导致我在虚拟环境内使用pip安装更多包时出现权限错误。

chown : -R ..../venvs/deep-learning/*

这就是解决方法。经过这些步骤,我可以激活虚拟环境并正确运行pip命令。它会使用虚拟环境内部的pip,并在虚拟环境中安装包。

对我来说,这个方法有效,但我还必须从$PYTHONPATH中删除系统Python路径,并用虚拟环境的路径替换它:$export PYTHONPATH=..../venvs/deep-learning/lib/python3.8/site-packages

0