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

时间:2015-07-20 08:58:05

标签: python django pip

我正在尝试设置Django

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

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'

出了什么问题,如何解决这个问题?

9 个答案:

答案 0 :(得分:290)

我们应该停止建议sudopip install一起使用。首先尝试pip install --user会更好。如果此操作失败,请查看热门帖子here

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

当您使用sudo运行pip时,您将以root用户身份从Internet运行任意Python代码,这是一个相当大的安全风险。如果有人在PyPI上设置恶意项目并进行安装,则会授予攻击者root权限。

答案 1 :(得分:54)

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

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

选项b)在homedir中安装:

pip install --user -r requirements.txt

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

答案 2 :(得分:25)

只是澄清了在linux(基于ubuntu的)基于权限被拒绝错误的痛苦之后对我有用的东西,并且利用Bert的答案,我现在使用......

$ pip install --user <package-name>

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

$ pip install --user -r requirements.txt

这些可以在每个pip安装中可靠地工作,包括创建虚拟环境。

但是,在我的进一步经验中,最简洁的解决方案 一直是在系统级安装python-virtualenvvirtualenvwrapper sudo apt-get install

然后,在虚拟环境中,使用pip install而不使用--user标记 AND 而不使用sudo。整体更清洁,更安全,更容易。

答案 3 :(得分:24)

您正试图在系统范围的路径上安装软件包,而无权这样做。

  1. 通常,您可以使用sudo暂时获取超级用户 权限由您负责,以便在系统范围的路径上安装软件包:

    sudo pip install -r requirements.txt
    

    详细了解sudo here

  2. 如果您不想进行系统范围的更改,可以使用--user标记在每用户路径上安装该软件包。

    所需要的只是:

    pip install --user runloop requirements.txt
    
  3. 最后,对于更精细的控制,您还可以使用virtualenv,这可能是开发环境的优秀解决方案,尤其是在您正在开展工作时< strong>多个项目,并希望跟踪每个项目的依赖关系。

    激活你的virtualenv后

    $ my-virtualenv/bin/activate

    以下命令将在virtualenv中安装软件包(并且在系统范围的路径上 not ):

    pip install -r requirements.txt

答案 4 :(得分:6)

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

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

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

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

答案 5 :(得分:0)

因此,由于完全不同的原因,我得到了相同的确切错误。由于Homebrew + pip bug是一个完全独立但已知的地方,因此我遵循了this workaround在Google Cloud的帮助文档中列出的内容,您可以在其主目录中创建一个.pydistutils.cfg文件。该文件具有特殊的配置,只应将其用于安装某些库。安装软件包后,我应该已经删除了该disutils.cfg文件,但是我忘记这样做了。所以对我来说,解决方法实际上只是...

rm ~/.pydistutils.cfg

然后一切正常。当然,如果确实有原因在该文件中有一些配置,那么您将不希望直接对该文件进行管理。但是,如果其他人做了那种解决方法,却忘了删除该文件,这对我来说就成功了!

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)

这是应有的权限问题,

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,它将安装在您的环境中

不要说sudo pip install -r requirements.txt,它将安装到任意python路径中。

答案 8 :(得分:-2)

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