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?
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.
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.
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 --user
ET sans Sudo
. Beaucoup plus propre, plus sûr et plus facile dans l’ensemble.
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/
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é!