108

我尝试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的目录,不显示与 Markdown 相关的目录。easy_installpipsetuptools

如何在pip不遇到权限相关错误的情况下在虚拟环境中部署包?

4

9 回答 9

127

解决方案:

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

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

这可能会解决您的问题。

干杯

于 2015-03-11T10:42:45.170 回答
116

virtualenv当您创建virtualenvassudo然后在sudo没有virtualenv.

正如您在问题的评论中发现的那样,这里的解决方案是创建virtualenv没有.sudosudo

于 2013-10-19T23:02:02.293 回答
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
于 2016-12-22T05:20:00.077 回答
6

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

sudo su

它会给你root访问权限,然后使用它激活你的虚拟环境

source /root/.env/ENV_NAME/bin/activate
于 2019-10-07T10:02:43.273 回答
5

I didn't create my virtualenv using sudo. So Sebastian's answer didn't apply to me. My project is called utils. I checked utils directory and saw this:

-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

As you can see, utils.egg-info is owned by root not macuser. That is why it was giving me permission denied error. I also had to remove /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link as it was created by root as well. I did pip install -e . again after removing those, and it worked.

于 2015-01-08T19:04:23.487 回答
1

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

试试看:

$(your venv path) . bin/activate

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

于 2017-08-08T11:59:42.460 回答
1

在现有的虚拟环境中创建新的 venv 后,我也发生了这种情况(偶然)。诊断此问题的一种简单方法是查看python符号链接到的位置,即运行:

ls -l venv/bin/python

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

于 2020-01-03T10:49:35.687 回答
0

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

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

cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/
于 2017-09-16T13:40:01.967 回答
0

尝试:

. venv/bin/activate

或者:

source venv/bin/activate
于 2022-02-17T13:26:59.710 回答