我创建了一个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问题,并确认在虚拟环境的activate文件中正确设置了VIRTUAL_ENV变量。
发布于 2017-01-20 12:38:07
问题是:
如果您在没有安装本地pip的情况下在venv上运行pip,那么它将默认为venv之外的系统的pip。即使您已经激活了虚拟环境,它似乎也希望在系统上安装软件包,而不是在venv中安装软件包。
解决办法如下:
pip在虚拟环境中安装了here。但是,这样做需要使用一些临时文件夹,由于某些原因,我的用户无法访问这些文件夹。所以这失败了,我唯一能让它发挥作用的方法就是生根。1. `sudo su`
2. `activate ..../venvs/deep-learning/bin/activate` to activate the virtual environment.
3. `curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python` as per the answer linked above.虽然which pip现在表示正在使用正确的pip (在venv中),但是运行pip将使用system!失活(deactivate)和重新激活静脉解决了这个问题。
现在,我花了一段时间才意识到,在虚拟环境中使用pip安装更多包时,将它作为根用户安装会导致权限错误。
chown <user>:<group> -R ..../venvs/deep-learning/*就是这样。在这些步骤之后,我可以激活venv并正确地运行pip。它将在venv中使用pip,并在venv中安装包。
https://stackoverflow.com/questions/41763306
复制相似问题