如何避免与virtualenv一起使用pip时的“权限被拒绝”

我尝试在Ubuntu机器上的虚拟环境中使用pip部署Python包,但是遇到与权限相关的问题。 例如:

 (TestVirtualEnv)test@testServer:~$ pip install markdown2 

终止:

错误:无法创build'/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py':权限被拒绝

我不能sudo ,因为它将全局安装包,而不是在虚拟环境中。 我chown编辑site-packages ; ls只显示与easy_installpipsetuptools相关的目录,而与Markdown没有关系。

如何使用pip在虚拟环境中部署软件包而不会遇到与权限相关的错误?

当您创buildvirtualenv作为sudo ,然后在virtualenv不使用sudo操作时,可能会发生virtualenv权限问题。

正如在你的问题的评论中发现的,这里的解决scheme是创build没有sudovirtualenv ,能够在没有sudo情况下工作 (特别是写入)。

解:

如果您以root身份创build了virtualenv,请运行以下命令:

 sudo chown -R your_username:your_username path/to/virtuaelenv/ 

这可能会解决您的问题。

干杯

我没有使用sudo创build我的virtualenv。 所以塞巴斯蒂安的回答并不适用于我。 我的项目被称为utils 。 我检查了utils目录,看到这个:

 -rw-r--r-- 1 macuser staff 983 6 Jan 15:17 README.md drwxr-xr-x 6 root staff 204 6 Jan 14:36 utils.egg-info -rw-r--r-- 1 macuser staff 31 6 Jan 15:09 requirements.txt 

正如你所看到的, utils.egg-info属于root而不是macuser 。 这就是为什么它给了我permission denied错误。 我也必须删除/Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link因为它也是由root创build的。 我做了pip install -e . 除去后,再次工作。

在我的情况下,我正在使用mkvirtualenv ,但没有告诉我将要使用python3。 我得到这个错误:

 mkvirtualenv hug pip3 install hug -U .... error: could not create '/usr/lib/python3.4/site-packages': Permission denied 

它指定python3后工作:

 mkvirtualenv --python=/usr/bin/python3 hug pip3 install hug -U 

在使用pip之前,您没有激活虚拟环境

尝试一下:

 $(your venv path) . bin/activate 

然后在主文件夹上使用pip -r requirements.txt

如果使用sudo创buildvirtualenv,则使用root权限创build该目录。因此,当您尝试使用非sudo用户安装软件包时,您将无权安装该软件包。 所以总是在没有sudo的情况下创buildvirtualenv,而不安装sudo。

您还可以将安装在全局Python中的软件包复制到virtualenv。

 cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/