首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -虚拟环境使用系统目录

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

Stack Overflow用户
提问于 2017-01-20 12:06:19
回答 1查看 356关注 0票数 1

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

代码语言:javascript
复制
joe@joe-mint $ source ./venvs/deep-learning/bin/activate

将提示符转换为:

代码语言:javascript
复制
(deep-learning) joe@joe-mint $

现在,每当我运行python包或尝试安装一个包时,系统似乎忽略了这样一个事实,即它位于虚拟环境中,并且在系统范围内执行操作:

代码语言:javascript
复制
(deep-learning) joe@joe-mint $ which pip
/usr/local/bin/pip

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

我的虚拟环境怎么了?如何让它忽略系统文件并在环境中完成所有事情?

我看过this问题,它说在创建虚拟环境时使用显式标志,让它使用本地环境包,但是我使用python-3.5 -m venv创建虚拟环境,这个标志在这个版本中被删除,因为它现在是一个默认选项。

我还研究了this问题,并确认在虚拟环境的activate文件中正确设置了VIRTUAL_ENV变量。

EN

回答 1

Stack Overflow用户

发布于 2017-01-20 12:38:07

问题是:

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

解决办法如下:

  • 首先,由于a bug that has long remained unresolved,我不得不在没有pip的情况下安装虚拟环境。
  • 其次,我按照指令pip在虚拟环境中安装了here。但是,这样做需要使用一些临时文件夹,由于某些原因,我的用户无法访问这些文件夹。所以这失败了,我唯一能让它发挥作用的方法就是生根。
代码语言:javascript
复制
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中安装包。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41763306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档