使用带有virtualenv的pip时如何避免“权限被拒绝”

时间:2013-10-19 22:46:18

标签: python virtualenv pip

我尝试在Ubuntu计算机上的虚拟环境中部署带有pip的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相关的目录,并且与Markdown无关。

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

8 个答案:

答案 0 :(得分:89)

virtualenv创建为virtualenv,然后在sudo中不使用sudo进行操作时,可能会出现{p> virtualenv个权限问题。

正如您的问题评论中所述,此处的解决方案是创建 virtualenvsudo无法{strong>工作(特别是写在其中没有sudo

答案 1 :(得分:81)

<强>解决方案:

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

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

这可能会解决您的问题。

干杯

答案 2 :(得分:4)

我没有使用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-inforoot而非macuser所有。这就是它给我permission denied错误的原因。我还必须删除由/Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link创建的root。在删除之后我再次pip install -e .,并且它有效。

答案 3 :(得分:3)

在我的情况下,我使用的是if let tempArray = json as? [[String: Any]] { self.newsArray = tempArray.mutableCopy() self.tableView.reloadData() } ,但没有告诉我我将使用python3。我收到了这个错误:

mkvirtualenv

在指定python3之后工作:

mkvirtualenv hug
pip3 install hug -U

....
error: could not create '/usr/lib/python3.4/site-packages': Permission denied

答案 4 :(得分:2)

如果您使用root用户创建了虚拟环境,请使用此命令

sudo su

它将为您提供root访问权限,然后使用此权限激活您的虚拟环境

source /root/.env/ENV_NAME/bin/activate

答案 5 :(得分:1)

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

尝试使用:

$(your venv path) . bin/activate

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

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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

ls -l venv/bin/python

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