Я пытаюсь настроить 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'
Что не так и как это исправить?
Вариант а) Создайте virtualenv, активируйте его и установите:
virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt
Вариант б) Установите в свой домашний каталог:
pip install --user -r requirements.txt
Моя рекомендация - использовать опцию safe (a), чтобы требования этого проекта не мешали требованиям других проектов.
Мы действительно должны перестать рекомендовать использовать sudo
с pip install
. Лучше сначала попробовать pip install --user
. Если это не помогло, взгляните на верхний пост здесь.
Причина, по которой вы не должны использовать sudo
заключается в следующем:
Когда вы запускаете pip с помощью sudo
, вы запускаете произвольный код Python из Интернета от имени пользователя root, что представляет собой довольно большую угрозу безопасности. Если кто-то запускает вредоносный проект в PyPI и вы устанавливаете его, вы предоставляете злоумышленнику root-доступ к своей машине.
Просто уточнив, что сработало для меня после сильной боли в 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
. Гораздо чище, безопаснее и проще в целом.
pip install --user -r requirements.txt
Вы пытаетесь установить пакет по общесистемному пути без разрешения на это.
В общем, вы можете использовать sudo
для временного получения разрешений суперпользователя под свою ответственность для установки пакета по общесистемному пути:
sudo pip install -r requirements.txt
Узнайте больше о sudo
здесь.
Если вы не хотите вносить общесистемные изменения, вы можете установить пакет по своему пути пользователя, используя флаг --user
.
Все, что нужно, это:
pip install --user runloop requirements.txt
Наконец, для еще более детального контроля вы также можете использовать virtualenv, который может быть превосходным решением для среды разработки, особенно если вы работаете над несколькими проектами и хотите отслеживать все зависимости.
После активации вашего virtualenv с
$ my-virtualenv/bin/activate
следующая команда установит пакет внутри virtualenv (а не по общесистемному пути):
pip install -r requirements.txt
Пользователь не имеет права на запись для некоторых путей установки Python. Вы можете дать разрешение:
sudo chown -R $USER /absolute/path/to/directory
Итак, вы должны дать разрешение, затем попробуйте установить его снова, если у вас есть новые пути, вы также должны дать разрешение:
sudo chown -R $USER /usr/local/lib/python2.7/
Итак, я получил ту же самую точную ошибку по совершенно другой причине. Из-за совершенно отдельной, но известной ошибки Homebrew + pip я следовал этому обходному пути, указанному в справочных документах Google Cloud, где вы создаете файл .pydistutils.cfg в своем домашнем каталоге. Этот файл имеет специальную конфигурацию, которую вы должны использовать только для установки определенных библиотек. Я должен был удалить этот файл disutils.cfg после установки пакетов, но я забыл это сделать. Так что решение для меня было на самом деле просто...
rm ~/.pydistutils.cfg
.
И тогда все заработало как обычно. Конечно, если у вас есть какая-то конфигурация в этом файле по реальной причине, вы не захотите просто скомпоновать этот файл. Но если кто-то еще сделал этот обходной путь и забыл удалить этот файл, это помогло мне!
Только эта команда работала для меня, если у кого-то была такая же проблема:
sudo -H/usr/local/bin/pip install --upbrade boto3
попробуйте использовать команду sudo su
, если вы используете Ubuntu, а затем запустите pip install
как суперпользователя. Это может помочь. У меня была такая же проблема, и она была решена из-за этого.
Если вы находитесь в Windows, попробуйте запустить команду pip install
, выполнив командную строку (cmd) как admin!
Выполните chmod -0777 -r
в виртуальной среде и запустите pip install -r requirements.txt
sudo:pip: command not found
в моем экземпляре aws ec2 при выполнении этой команды. Пожалуйста помоги.