web-dev-qa-db-fra.com

pip install -r: OSError: [Errno 13] Permission refusée

Je suis en train de configurer Django

Lorsque j'exécute pip install -r requirements.txt, j'obtiens l'exception suivante:

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'

Quel est le problème et comment puis-je résoudre ce problème?

92
RunLoop

Option a) Créez un fichier virtualenv, activez-le et installez:

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

Option b) Installer dans votre homedir:

pip install --user -r requirements.txt

Ma recommandation utilise l'option safe (a), afin que les exigences de ce projet n'interfèrent pas avec les exigences d'autres projets.

50
hectorcanto

Nous devrions vraiment cesser de conseiller l'utilisation de Sudo avec pip install. Il vaut mieux essayer d'abord pip install --user. Si cela échoue, jetez un coup d'œil au message en haut ici .

La raison pour laquelle vous ne devriez pas utiliser Sudo est la suivante:

Lorsque vous exécutez pip avec Sudo, vous exécutez du code Python arbitraire à partir d'Internet en tant qu'utilisateur root, ce qui représente un risque de sécurité considérable. Si quelqu'un installe un projet malveillant sur PyPI et que vous l'installez, vous donnez à un attaquant un accès root à votre ordinateur.

283
bert

Juste pour clarifier ce qui a fonctionné pour moi après avoir beaucoup souffert sous Linux (basé sur Ubuntu) sur les erreurs de permission refusée, et en tirant parti de la réponse de Bert ci-dessus, j'utilise maintenant ...

$ pip install --user <package-name>

ou si vous exécutez pip sur un fichier d'exigences ...

$ pip install --user -r requirements.txt

et ceux-ci fonctionnent de manière fiable pour chaque installation de pip, y compris la création d'environnements virtuels.

Cependant, la solution la plus propre dans mon expérience ultérieure a été d'installer python-virtualenv et virtualenvwrapper avec Sudo apt-get install au niveau du système. 

Ensuite, dans les environnements virtuels, utilisez pip install sans l'indicateur --userET sans Sudo. Beaucoup plus propre, plus sûr et plus facile dans l’ensemble.

24
Thom Ives

L'utilisateur n'a pas l'autorisation d'écriture pour certains chemins d'installation Python. Vous pouvez donner la permission par:

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

Donc, vous devriez donner la permission, puis essayez de l'installer à nouveau. Si vous avez de nouveaux chemins, vous devriez aussi donner la permission:

Sudo chown -R $USER /usr/local/lib/python2.7/
6
Mesut GÜNEŞ

Donc, j'ai eu la même erreur exacte pour une raison complètement différente. En raison d'un bogue Homebrew + pip totalement distinct, mais connu , j'avais suivi cette solution de contournement répertorié dans la documentation de Google Cloud, dans lequel vous créez un fichier .pydistutils.cfg dans votre répertoire personnel. Ce fichier a une configuration spéciale que vous n'êtes censé utiliser que pour votre installation de certaines bibliothèques. J'aurais dû supprimer ce fichier disutils.cfg après avoir installé les paquets, mais j'ai oublié de le faire. Donc, la solution pour moi était en fait juste ...

rm ~/.pydistutils.cfg

Et puis tout a fonctionné comme d'habitude. Bien sûr, si vous avez une configuration dans ce fichier pour une raison réelle, vous ne voudrez pas simplement le lire directement. Mais au cas où quelqu'un d'autre aurait fait cette solution de contournement et aurait oublié de supprimer ce fichier, cela a parfaitement fonctionné!

0
bwest87