我创建了一个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)而不是虚拟环境。
我的虚拟环境出了什么问题?如何让它忽略系统文件并在环境中做所有事情?
我查看this问题,该问题在创建虚拟环境时使用显式标志以使其使用本地环境包,但我使用python-3.5 -m venv
创建虚拟环境,此标志已在此版本中删除,因为它现在是默认选项。
我还查看了this个问题,可以确认{1}}变量在虚拟环境的VIRTUAL_ENV
文件中设置正确。
答案 0 :(得分:0)
问题在于:
似乎如果你在没有安装本地using
的情况下在一个venv上运行pip
,那么它将默认发送到venv之外的系统pip
。即使您已激活虚拟环境,这似乎也希望在系统上而不是在venv中安装软件包。
以下是解决方案:
首先,由于a bug that has long remained unresolved,我不得不安装虚拟环境。
其次,我按照here指令在虚拟环境中安装了pip
。但是,这样做需要使用一些临时文件夹,由于某些原因我的用户无法访问。所以这失败了,我能让它发挥作用的唯一方法就是成为root。
pip
sudo su
激活虚拟环境。activate ..../venvs/deep-learning/bin/activate
根据上面的答案。虽然curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python
现在表示正在使用正确的which pip
(在venv中),但运行pip
会使用系统一个!停用(pip
)并重新激活venv解决了这个问题。
现在我花了一段时间才意识到,在尝试使用虚拟环境中的deactivate
安装更多软件包时,以root用户身份安装这会导致许可错误。
pip
就是这样。完成这些步骤后,我可以激活venv并正确运行chown <user>:<group> -R ..../venvs/deep-learning/*
。它将使用venv中的pip
,并在pip
内安装包。