pip install -r: OSError: [Errno 13] Отказано в доступе

93

Я пытаюсь настроить 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'

Что не так и как это исправить?

Теги:
pip

9 ответов

48
Лучший ответ

Вариант а) Создайте virtualenv, активируйте его и установите:

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

Вариант б) Установите в свой домашний каталог:

pip install --user -r requirements.txt

Моя рекомендация - использовать опцию safe (a), чтобы требования этого проекта не мешали требованиям других проектов.

  • 2
    Я получил ошибку, такую как sudo:pip: command not found в моем экземпляре aws ec2 при выполнении этой команды. Пожалуйста помоги.
  • 0
    Это сработало для меня - получил ссылку, объясняющую почему?
Показать ещё 10 комментариев
266

Мы действительно должны перестать рекомендовать использовать sudo с pip install. Лучше сначала попробовать pip install --user. Если это не помогло, взгляните на верхний пост здесь.

Причина, по которой вы не должны использовать sudo заключается в следующем:

Когда вы запускаете pip с помощью sudo, вы запускаете произвольный код Python из Интернета от имени пользователя root, что представляет собой довольно большую угрозу безопасности. Если кто-то запускает вредоносный проект в PyPI и вы устанавливаете его, вы предоставляете злоумышленнику root-доступ к своей машине.

  • 2
    Не могли бы вы уточнить?
  • 3
    Да, конечно, извините. Я изменю свой ответ!
Показать ещё 6 комментариев
25

Просто уточнив, что сработало для меня после сильной боли в 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. Гораздо чище, безопаснее и проще в целом.

  • 0
    Я получаю «Не могу выполнить установку --user». Пользовательские пакеты сайта не видны в этом virtualenv ». ошибка при попытке pip install --user -r requirements.txt
22

Вы пытаетесь установить пакет по общесистемному пути без разрешения на это.

  1. В общем, вы можете использовать sudo для временного получения разрешений суперпользователя под свою ответственность для установки пакета по общесистемному пути:

    sudo pip install -r requirements.txt
    

    Узнайте больше о sudo здесь.

  2. Если вы не хотите вносить общесистемные изменения, вы можете установить пакет по своему пути пользователя, используя флаг --user.

    Все, что нужно, это:

    pip install --user runloop requirements.txt
    
  3. Наконец, для еще более детального контроля вы также можете использовать virtualenv, который может быть превосходным решением для среды разработки, особенно если вы работаете над несколькими проектами и хотите отслеживать все зависимости.

    После активации вашего virtualenv с

    $ my-virtualenv/bin/activate

    следующая команда установит пакет внутри virtualenv (а не по общесистемному пути):

    pip install -r requirements.txt

  • 4
    Запуск pip с рутом сопряжен с угрозами безопасности
  • 0
    Запуск всего, что запускает код из Интернета в качестве пользователя root, сопряжен с угрозами безопасности.
6

Пользователь не имеет права на запись для некоторых путей установки Python. Вы можете дать разрешение:

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

Итак, вы должны дать разрешение, затем попробуйте установить его снова, если у вас есть новые пути, вы также должны дать разрешение:

sudo chown -R $USER /usr/local/lib/python2.7/
  • 2
    Для python, установленного с brew, это правильный ответ, потому что brew поддерживает пакеты как локальный пользователь (без рута).
  • 3
    засорение / usr / local dir не очень хорошая идея. Это не принадлежит пользователю. Вы должны прочитать о структуре файлов Unix.
Показать ещё 1 комментарий
0

Итак, я получил ту же самую точную ошибку по совершенно другой причине. Из-за совершенно отдельной, но известной ошибки Homebrew + pip я следовал этому обходному пути, указанному в справочных документах Google Cloud, где вы создаете файл .pydistutils.cfg в своем домашнем каталоге. Этот файл имеет специальную конфигурацию, которую вы должны использовать только для установки определенных библиотек. Я должен был удалить этот файл disutils.cfg после установки пакетов, но я забыл это сделать. Так что решение для меня было на самом деле просто...

rm ~/.pydistutils.cfg.

И тогда все заработало как обычно. Конечно, если у вас есть какая-то конфигурация в этом файле по реальной причине, вы не захотите просто скомпоновать этот файл. Но если кто-то еще сделал этот обходной путь и забыл удалить этот файл, это помогло мне!

0

Только эта команда работала для меня, если у кого-то была такая же проблема:

sudo -H/usr/local/bin/pip install --upbrade boto3

0

попробуйте использовать команду sudo su, если вы используете Ubuntu, а затем запустите pip install как суперпользователя. Это может помочь. У меня была такая же проблема, и она была решена из-за этого.

Если вы находитесь в Windows, попробуйте запустить команду pip install, выполнив командную строку (cmd) как admin!

-3

Выполните chmod -0777 -r в виртуальной среде и запустите pip install -r requirements.txt

Ещё вопросы

Сообщество Overcoder
Наверх
Меню