关于python:pip install -r:OSError:[Errno 13]权限被拒绝

pip install -r: OSError: [Errno 13] Permission denied

我正在尝试设置Django。

当我运行pip install -r requirements.txt时,我得到以下异常:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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'

怎么了?我该怎么解决?


我们真的应该停止建议使用sudopip install。最好先试试pip install --user。如果失败了,那就看看这里的顶柱。

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

当您使用sudo运行pip时,您作为根用户从Internet上运行任意的python代码,这是一个很大的安全风险。如果有人在pypi上放置了一个恶意项目,并且您安装了它,那么您就给了攻击者对您的计算机的根访问权。


选项a)创建virtualenv,激活它并安装:

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

选项b)在homedir中安装:

1
pip install --user -r requirements.txt

我的建议使用SAFE(a)选项,这样这个项目的需求就不会干扰其他项目的需求。


只需说明在Linux(基于Ubuntu)中,由于拒绝权限的错误而经历了许多痛苦之后,对我有用的东西,并利用上面Bert的回答,我现在使用……

1
$ pip install --user <package-name>

或者如果在需求文件上运行PIP…

1
$ pip install --user -r requirements.txt

对于每个PIP安装,包括创建虚拟环境,这些功能都是可靠的。

然而,在我以后的经验中,最干净的解决方案是在系统级安装python-virtualenvvirtualenvwrappersudo apt-get install

然后,在虚拟环境中,使用不带--user标志和不带sudo标志的pip install。整体上更干净、更安全、更容易。


您试图在系统范围内的路径上安装程序包,但没有相应的权限。

  • 一般来说,您可以使用sudo临时获得超级用户在系统范围内安装软件包所需的权限:

    1
    sudo pip install -r requirements.txt

    在这里了解更多关于sudo的信息。

  • 如果不想在系统范围内进行更改,可以使用--user标志在每个用户路径上安装包。

    只需要:

    1
    pip install --user runloop requirements.txt
  • 最后,对于更细粒度的控制,您还可以使用virtualenv,这可能是开发环境的最佳解决方案,特别是当您正在处理多个项目并希望跟踪每个项目的依赖关系时。

    激活virtualenv后,

    $ my-virtualenv/bin/activate

    以下命令将在virtualenv中安装包(而不是在系统范围内的路径上):

    pip install -r requirements.txt


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

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

    因此,您应该授予权限,然后尝试再次安装它,如果您有新的路径,您还应该授予权限:

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


    所以,我得到了同样的精确误差,原因完全不同。由于一个完全独立但已知的homebrew+pip错误,我遵循了Google Cloud帮助文档中列出的解决方法,在这里您可以在主目录中创建一个.pydistutils.cfg文件。这个文件有一个特殊的配置,您只能用于安装某些库。我应该在安装包之后删除disutils.cfg文件,但我忘了这样做。所以我的解决方法实际上是…

    rm ~/.pydistutils.cfg

    然后一切正常。当然,如果您在该文件中有一些配置是出于真正的原因,那么您就不想直接使用rm这个文件。但如果其他人做了那个解决方案,忘记删除那个文件,这对我来说就是个骗局!


    在虚拟环境上执行chmod -0777 -R,运行pip install -r requirements.txt