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

Run*_*oop 113 python permissions install 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'
Run Code Online (Sandbox Code Playgroud)

怎么了,怎么解决这个问题?

ber*_*ert 299

我们真的应该停止建议使用sudopip install.最好先尝试一下pip install --user.如果失败,请查看此处的顶部帖子.

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

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

  • 很好的观察.毕竟,对于所有`x`(包括`x = make`),所有的`sudo x install`都是如此. (5认同)
  • 这也解决了我的问题。添加 --user 有什么作用? (2认同)
  • @MilesJohnson 添加 `--user` 会将软件包安装在您的主目录中,而不是根目录中。将某些内容安装到此位置不需要任何额外的权限。 (2认同)
  • 一年前,所有关于sudo的提及都被删除。该答案已过时-请对其进行修改和更新。您还需要提及每用户安装与系统范围内的安装和权限。不要用您的答案直接批评其他答案,而这些答案往往很快就会过时。 (2认同)

hec*_*nto 65

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

virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

选项b)在homedir中安装:

pip install --user -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 我已经读过,现在不建议在多个地方使用.似乎我们应该在运行pip时注意不要使用sudo(请参阅Bert的回答) (32认同)
  • 因为"sudo"的建议而贬低.即使它现在有效,它将来会给你带来很多麻烦. (8认同)
  • @JustusEapen:我不知道我对此感觉如何.我不认为OP问题的正确答案是关于基本计算机卫生的手册,包括"不要运行具有超级用户权限的阴影代码"和"定期刷牙".我发现最佳答案应该指出可以在每个用户或系统范围内安装软件包,并且在OP系统范围内安装(如果有完美的理由)需要超级用户许可.在系统路径上安装软件包的注意事项可能是其他一些问题上的其他工作. (3认同)
  • 运行此命令时,我的aws ec2实例上出现了类似"sudo:pip:command not found"的错误.请帮忙. (2认同)
  • @ user3768495可能默认情况下不安装pip.哪个发行版是你的EC2?此外,可能未安装python2,因此要么安装python2,要么使用pip3.但要小心这一点. (2认同)

Tob*_*san 27

您正在尝试在系统范围的路径上安装程序包,而无需执行此操作.

  1. 通常,您可以使用sudo临时获取超级用户 权限,以便在系统范围的路径上安装程序包:

    sudo pip install -r requirements.txt
    
    Run Code Online (Sandbox Code Playgroud)

    sudo 在此处了解更多信息.

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

    所需要的只是:

    pip install --user runloop requirements.txt
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,为了实现更精细的控制,您还可以使用virtualenv,这可能是开发环境的优秀解决方案,特别是如果您正在处理多个项目并希望跟踪每个项目的依赖关系.

    激活你的virtualenv后

    $ my-virtualenv/bin/activate

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

    pip install -r requirements.txt

  • 使用root运行pip附带[安全风险](/sf/answers/2941539541/) (4认同)
  • `sudo pip install -r requests.txt` 永远都不对。**系统的python环境是属于系统的,句号**。如果您确实在系统中安装了更多 python 东西,请仅使用包管理器(例如“sudo yum install”、“apt-get”等)进行安装,因为这些存储库应该具有可用的安全且兼容的库版本。 (2认同)
  • @TobiaTesan 旧的“sudo make install”,通常是编译+链接的代码,与“sudo pip install”并不真正相似,因为*安装到系统Python env可能会使依赖项无效*。假设有一个系统服务“python-frobnicator”,它依赖于“froblib”(这也将在包管理器中并固定到兼容版本),然后您“sudo pip install”其他一些应用程序或库依赖于“`froblib > 1.2`”。Pip 会很乐意将“froblib”的系统版本“升级”为较新的版本,这可能不兼容/未经测试并会破坏系统。 (2认同)

Tho*_*ves 25

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

$ pip install --user <package-name>
Run Code Online (Sandbox Code Playgroud)

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

$ pip install --user -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

这些工作可靠地用于每个pip安装,包括创建虚拟环境.

然而,干净的解决方案在我进一步的经验已经安装python-virtualenv,并virtualenvwrappersudo apt-get install在系统级.

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

  • 我收到“无法执行‘--user’安装。用户站点包在此 virtualenv 中不可见。” 尝试使用“pip install --user -rrequirements.txt”时出错 (2认同)

Mes*_*NEŞ 6

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

sudo chown -R $USER /absolute/path/to/directory
Run Code Online (Sandbox Code Playgroud)

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

sudo chown -R $USER /usr/local/lib/python2.7/
Run Code Online (Sandbox Code Playgroud)

  • chowning/usr/local dir不是个好主意.它不属于用户.您应该阅读有关unix文件结构的信息. (8认同)
  • 如今,[`/ usr`](https://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html)下的内容通常归root拥有。在那儿递归锁定可能会严重破坏您的系统。**避免**。 (6认同)
  • 对于使用brew安装的python,这是正确的答案,因为brew将包维护为本地用户(没有root). (2认同)