在virtualenv中使用pip时如何避免“权限被拒绝”


93

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

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

终止于:

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

我不能sudo,因为它将在全球范围内安装该软件包,而不是在虚拟环境中安装。我chown吃过site-packages; ls只显示目录有关easy_installpipsetuptools,并没有相关的降价。

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


只是为了澄清一下:您是否使用创建了virtualenv sudo
sebastian_oe

@sebastian_oe:我相信我做到了。我将重新创建一个以确保。
阿森尼·穆尔琴科(Arseni Mourzenko)2013年

4
那么这可能就是问题所在。尝试不创建一个virtualenv sudo
sebastian_oe

1
@sebastian_oe:我创建了一个没有的虚拟环境sudo。实际上,该软件包现在可以正确安装。请,您能否将您的评论提升为答案,以便我接受?
2013年

1
另外,如果要在不同用户之间切换,请确保您使用的是拥有(或具有写访问权)virtualenv目录的用户,因为您可以virtualenv与其他用户一起激活,但是该操作将不允许您安装任何软件包,并且将授予权限访问权限。
Andrius

Answers:


106

virtualenv当您创建virtualenvas时sudo,如果没有sudo,则可能会发生权限问题virtualenv

正如您的问题评论中所发现的那样,此处的解决方案是在没有的情况下创建virtualenv not sudo,使其能够工作(尤其是编写)sudo


4
如果我想在需要sudo的/ opt中创建它,我认为virtualenv将在没有sudo的情况下安装。
Umair A.

7
@sebastian_oe我想我爱你
Nobbynob Littlun 2014年

5
如何创建virtualenv没有sudo的?
Tunn

如果您确实使用创建了virtualenv sudo,请参阅@vingtoft的回答,以了解如何轻松修复它而无需重新创建它
David A

103

解:

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

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

这可能会解决您的问题。

干杯


1
这对我有用(chown /usr/local/lib/python3.4),除了我不认为我以root用户身份创建了一个virtualenv,实际上我以root用户身份安装了Python3.4。我仍在测试中,但是您认为此解决方案还会遇到更多问题,还是该chown解决大多数错误?
ntk4

3
如何确定是否以root用户身份创建了virtualenv或python?
A__

6

就我而言,我正在使用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

5

我没有使用sudo创建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属于rootnot macuser。这就是为什么它给我permission denied错误。我还必须删除/Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link它的创建者rootpip install -e .删除这些后,我又做了一次,并且有效。



1

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

尝试使用:

$(your venv path) . bin/activate

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


1

在现有的虚拟环境中创建新的虚拟现实之后,我也曾偶然发生过这种情况。一种简单的诊断方法是查看将python符号链接到的位置,即运行:

ls -l venv/bin/python

并确保它指向适当的Python二进制文件。对于大多数系统,这将是/usr/bin/python/usr/bin/python3。而如果它指向现有的虚拟环境,它将是类似于/home/youruser/somedir/bin/python。如果是后者,而不是我建议重新创建venv,同时确保您不在任何现有的virtualenv内部(即run deactivate


张贴在这里,因为这是一个提及适当关键字的热门问题,因此更有可能被发现并且对其他人有用
Sam Mason

0

如果使用sudo创建virtualenv时,该目录是使用root特权创建的,所以当您尝试使用非sudo用户安装软件包时,您将没有安装权限。因此,请始终在不使用sudo的情况下创建virtualenv并在不使用sudo的情况下进行安装。

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

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

这不是问题:如果您阅读注释,则OP首先会使用sudo创建虚拟环境。
NickD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.