pip install failing with: OSError: [Errno 13] Permission denied on directory

pip install -r requirements.txt fails with the exception below OSError: [Errno 13] Permission denied: '/usr/local/lib/.... What's wrong and how do I fix this? (I am trying to setup Django)

Installing collected packages: amqp, anyjson, arrow, beautifulsoup4, billiard, boto, braintree, celery, cffi, cryptography, Django, django-bower, django-braces, django-celery, django-crispy-forms, django-debug-toolbar, django-disqus, django-embed-video, django-filter, django-merchant, django-pagination, django-payments, django-storages, django-vote, django-wysiwyg-redactor, easy-thumbnails, enum34, gnureadline, idna, ipaddress, ipython, kombu, mock, names, ndg-httpsclient, Pillow, pyasn1, pycparser, pycrypto, PyJWT, pyOpenSSL, python-dateutil, pytz, requests, six, sqlparse, stripe, suds-jurko
Cleaning up...
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run
requirement_set.install(install_options, global_options, root=options.root_path)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
requirement.install(install_options, global_options, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install
self.move_wheel_files(self.source_dir, root=root)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files
pycompile=self.pycompile,
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 206, in move_wheel_files
clobber(source, lib_dir, True)
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 193, in clobber
os.makedirs(destsubdir)
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/amqp-1.4.6.dist-info'
286201 次浏览

您正在尝试在系统范围的路径上安装软件包,但没有这样做的权限。

  1. 通常,可以使用 sudo临时获得 < strong > superuser 权限 你的责任,以便在系统范围的路径上安装包:

     sudo pip install -r requirements.txt
    

    找到更多关于 sudo 给你的信息。

    实际上,这是个坏主意,而且没有好的用例,见@wim 的评论。

  2. 如果不希望进行系统范围的更改,可以使用 --user标志在 每名使用者路径上安装包。

    只需要:

     pip install --user runloop requirements.txt
    
  3. 最后,对于 更细粒度的控制,您还可以使用 虚拟世界,这可能是开发环境的优秀解决方案,特别是如果您正在使用 多个项目并且希望跟踪每个依赖项的话。

    激活你的虚拟世界之后

    $ my-virtualenv/bin/activate

    下面的命令将把软件包安装在 viralenv 中(在系统范围的路径上安装 没有) :

    pip install -r requirements.txt

选项 a)创建一个 viralenv,激活它并安装:

virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt

选项 b)安装在你的家居中:

pip install --user -r requirements.txt

我的建议使用安全(a)选项,以便该项目的需求不会干扰其他项目的需求。

与其在 pip install中使用 sudo,不如先尝试 pip install --user。如果这个失败了,那么看看最上面的文章 给你

你不应该使用 sudo的原因如下:

当您使用 sudo运行 pip 时,您是以 root 用户的身份从 Internet 运行任意的 Python 代码,这是一个相当大的安全风险。如果有人在 PyPI 上放置了一个恶意项目,并且您安装了它,那么您就向攻击者提供了对您的机器的 root 访问权限。

在 Linux (基于 ubuntu 的)中,我经历了许多权限被拒绝的错误,现在我只需要澄清什么对我有效,并利用 Bert 上面的答案,我现在使用..。

$ pip install --user <package-name>

或者如果在需求文件上运行 pip..。

$ pip install --user -r requirements.txt

这些工作可靠的每一个 pip 安装,包括创建虚拟环境。

然而,最干净的解决方案是在系统级安装带有 sudo apt-get installpython-virtualenvvirtualenvwrapper

然后,在虚拟环境中,使用没有 --user标志的 pip install,使用没有 sudo还有

用户对某些 Python 安装路径没有写权限。您可以通过以下方式授予该权限:

sudo chown -R $USER /absolute/path/to/directory

因此,你应该给予许可,然后尝试再次安装它,如果你有新的路径,你也应该给予许可:

sudo chown -R $USER /usr/local/lib/python2.7/

所以,我得到这个完全相同的错误出于完全不同的原因。由于一个完全独立的,但已知的 自制加点心虫,我已经按照 这个变通方案列在谷歌云的帮助文档,在那里你创建一个。主目录中的 pydistutils.cfg 文件。这个文件有一个特殊的配置,您只能在安装某些库时使用它。我应该在安装包之后删除 disutils.cfg 文件,但是我忘了这样做。所以我的解决办法其实是..。

rm ~/.pydistutils.cfg.

然后一切正常。当然,如果出于某种真正的原因,您在该文件中有某些配置,那么您不会希望直接对该文件进行 rm 操作。但是如果其他人做了这个变通,并忘记删除该文件,这为我做了诀窍!

这是应得许可的问题,

sudo chown -R $USER /path to your python installed directory

默认值为 /usr/local/lib/python2.7/

或者尝试,

pip install --user -r package_name

然后说,pip install -r requirements.txt这将安装在您的 env 内

不要说,sudo pip install -r requirements.txt这是将安装到任意的 Python 路径。

如果需要权限,则不能将“ pip”与“ sudo”一起使用。 您可以做一个技巧,这样您就可以使用“ sudo”并安装软件包。只要将“ sudo python-m...”放在 pip 命令的前面。

sudo python -m pip install --user -r package_name