Python - 虚拟环境使用系统目录

时间:2017-01-20 12:06:20

标签: python virtualenv

我创建了一个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文件中设置正确。

1 个答案:

答案 0 :(得分:0)

问题在于:

似乎如果你在没有安装本地using的情况下在一个venv上运行pip,那么它将默认发送到venv之外的系统pip。即使您已激活虚拟环境,这似乎也希望在系统上而不是在venv中安装软件包。

以下是解决方案:

  • 首先,由于a bug that has long remained unresolved,我不得不安装虚拟环境。

  • 其次,我按照here指令在虚拟环境中安装了pip。但是,这样做需要使用一些临时文件夹,由于某些原因我的用户无法访问。所以这失败了,我能让它发挥作用的唯一方法就是成为root。

    1. pip
    2. sudo su激活虚拟环境。
    3. activate ..../venvs/deep-learning/bin/activate根据上面的答案。
    4. 虽然curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python现在表示正在使用正确的which pip(在venv中),但运行pip会使用系统一个!停用(pip)并重新激活venv解决了这个问题。

      现在我花了一段时间才意识到,在尝试使用虚拟环境中的deactivate安装更多软件包时,以root用户身份安装这会导致许可错误。

    5. pip

就是这样。完成这些步骤后,我可以激活venv并正确运行chown <user>:<group> -R ..../venvs/deep-learning/*。它将使用venv中的pip,并在pip内安装包。