如何避免与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_install
, pip
和setuptools
相关的目录,而与Markdown没有关系。
如何使用pip
在虚拟环境中部署软件包而不会遇到与权限相关的错误?
当您创buildvirtualenv
作为sudo
,然后在virtualenv
不使用sudo
操作时,可能会发生virtualenv
权限问题。
正如在你的问题的评论中发现的,这里的解决scheme是创build没有sudo
的virtualenv
,能够在没有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/