我尝试在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_install
,pip
和setuptools
相关的目录,并且与Markdown无关。
如何在pip
的虚拟环境中部署软件包而不会遇到与权限相关的错误?
答案 0 :(得分:89)
virtualenv
创建为virtualenv
,然后在sudo
中不使用sudo
进行操作时,可能会出现{p> virtualenv
个权限问题。
正如您的问题评论中所述,此处的解决方案是创建 virtualenv
而sudo
无法{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-info
归root
而非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
)