pip 安装失败,并显示:OSError: [Errno 13] 目录权限被拒绝

问题描述 投票:0回答:10

pip install -r requirements.txt
失败,但以下异常除外
OSError: [Errno 13] Permission denied: '/usr/local/lib/...
。出了什么问题以及如何解决这个问题? (我正在尝试设置 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'
python permissions pip installation
10个回答
357
投票

与其将

sudo
pip install
一起使用,不如先尝试
pip install --user
。如果失败,请查看置顶帖子此处

不应该使用

sudo
的原因如下:

当您使用

sudo
运行pip时,您将以root用户身份运行来自互联网的任意Python代码,这是一个相当大的安全风险。如果有人在 PyPI 上发布了恶意项目并且您安装了它,您就为攻击者提供了对您计算机的 root 访问权限。


101
投票

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

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

选项 b) 安装在您的主目录中:

pip install --user -r requirements.txt

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


30
投票

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

  1. 一般可以使用

    sudo
    来临时获取超级用户 权限由您负责,以便在系统范围的路径上安装软件包:

     sudo pip install -r requirements.txt
    

    了解更多关于

    sudo
    这里

    实际上,这是一个坏主意,并且没有好的用例,请参阅@wim 的评论。

  2. 如果您不想进行系统范围的更改,您可以使用 --user 标志将软件包安装在您的

    per-user
    路径上。

    所需要的只是:

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

    使用

    激活您的 virtualenv 后

    $ my-virtualenv/bin/activate

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

    pip install -r requirements.txt

    
    


27
投票
只是澄清在Linux(基于ubuntu)中因权限被拒绝错误而遭受很多痛苦之后对我有用的方法,并利用上面Bert的答案,我现在使用...

$ pip install --user <package-name>

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

$ pip install --user -r requirements.txt

这些对于每个 pip 安装(包括创建虚拟环境)都能可靠地工作。

但是,根据我的进一步经验

,最干净的解决方案是在系统级别安装 python-virtualenv

virtualenvwrapper
以及
sudo apt-get install

然后,在虚拟环境中,使用不带

pip install

标志的

--user
以及不带
sudo
AND。整体上更清洁、更安全、更轻松。
    


14
投票

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

所以你应该授予权限,然后尝试再次安装它,如果你有新的路径你也应该授予权限:

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



1
投票

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



0
投票

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org PACKAGE_NAME --user

pip install --user <package name>

示例:

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org matplotlib --user



0
投票

在虚拟环境文件夹中找到
    pyvenv.cfg
  1. 文件。
    如果 
  2. include-system-site-packages
  3. 设置为 false,请将其更改为 true 并保存文件。
    停用环境
  4. deactivate
  5. 现在再次激活环境
  6. source environment_name/bin/activate
  7. 
        

-1
投票
Homebrew + pip bug

,我遵循了 Google Cloud 帮助文档中列出的 此解决方法,您可以在主目录中创建一个 .pydistutils.cfg 文件。该文件具有特殊配置,您只能将其用于安装某些库。我应该在安装软件包后删除 disutils.cfg 文件,但我忘记这样做了。所以对我来说解决办法实际上只是......

rm ~/.pydistutils.cfg


然后一切正常。当然,如果您出于真正的原因在该文件中进行了一些配置,那么您不会只想直接 rm 该文件。但万一其他人做了这个解决方法,并且忘记删除该文件,这对我来说是成功的!


-5
投票

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路径中。

    

© www.soinside.com 2019 - 2024. All rights reserved.