权限被拒绝:’/usr/local/lib/python2.7/dist-packages/pytz-2017.2.dist-info’
我尝试用pip install Django==1.11.4
但是我一直都遇到这个错误:
Exception: Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 342, in run prefix=options.prefix_path, File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 784, in install **kwargs File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 851, in install self.move_wheel_files(self.source_dir, root=root, prefix=prefix) File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 1064, in move_wheel_files isolated=self.isolated, File "/usr/local/lib/python2.7/dist-packages/pip/wheel.py", line 345, in move_wheel_files clobber(source, lib_dir, True) File "/usr/local/lib/python2.7/dist-packages/pip/wheel.py", line 316, in clobber ensure_dir(destdir) File "/usr/local/lib/python2.7/dist-packages/pip/utils/__init__.py", line 83, in ensure_dir os.makedirs(path) File "/usr/lib/python2.7/os.py", line 157, in makedirs mkdir(name, mode) OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/pytz-2017.2.dist-info'
默认情况下,pip安装在/usr/local
,这需要sudo权限。 相反,无论何时使用Python模块,都要使用virtualenv。 这很简单:
-
全局安装Python virtualenv
sudo pip install virtualenv
-
创建一个virtualenv
virtualenv Venv
-
激活你的virtualenv
source Venv/bin/activate
-
在virtualenv中本地安装Django
pip install django
这样您就不必担心修改全局Python模块而且更安全。
Pip正在尝试将其安装在需要管理员权限的/ usr / local文件夹中。 如果您是管理员并想要安装它,则使用sudo运行相同的命令:
sudo pip install Django==1.11.4
它会询问您的密码,应该是密码。
编辑:你也可以使用pip的–user选项,但它只适用于当前用户。
@ Sanchit的回答是正确的。 如果您在计算机中管理不同的项目并且不希望一个项目的依赖项干扰另一个项目,那么虚拟环境就是您的选择。
如果您想在系统中使用本地安装的pip在没有虚拟环境的情况下安装软件包,同时获得权限被拒绝错误,请尝试单独为当前用户安装软件包。 这可以通过将--user
标志附加到pip install
命令来完成。
例如:
pip install Django==1.11.4 --user
另外,我不会使用sudo
权限安装pip
包,原因有两个:
-
每个用户可能无法使用SUDO。
-
* SUDO似乎只为
root
用户而不是当前用户安装软件包(至少在我的情况下 – Ubuntu 16.04,OpenStack Cloud Instance)
*可能不适用于你。 我发现很难再现。