127 votes

Obtention du message "Permission refusée" lors de l'exécution de pip en tant que Root sur mon Mac

J'ai commencé à utiliser mon Mac pour installer des paquets Python de la même manière que je le fais sur mon PC Windows au travail. permission refusée des erreurs lors de l'écriture dans les fichiers journaux ou les paquets de sites.

J'ai donc pensé à courir pip install <package> sous sudo mais est-ce une utilisation sûre/acceptable de sudo étant donné que je veux juste que cela soit installé sous mon compte utilisateur actuel ?

Exemple de traceback d'une erreur d'E/S de fichier journal :

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

Mise à jour Il s'agit probablement d'une question de permissions, mais la meilleure approche consiste à utiliser des environnements virtuels pour vos projets python. Exécution de sudo pip doivent être évitées, sauf en cas de nécessité absolue.

110voto

Burhan Khalid Points 50578

Utilisez un environnement virtuel :

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

Vous utilisez uniquement sudo ou des droits élevés lorsque vous voulez installer des éléments pour l'installation globale de Python dans tout le système.

Il est préférable d'utiliser un environnement virtuel qui isole les paquets pour vous. De cette façon, vous pouvez jouer sans polluer l'installation globale de python.

En prime, virtualenv ne nécessite pas de droits élevés.

48voto

Piotr Dobrogost Points 14412

Est-il acceptable et sûr de courir pip install sous sudo ?

Ce n'est pas sûr et c'est mal vu - cf. Quels sont les risques liés à l'exécution de "sudo pip" ? Pour installer le paquet Python dans votre répertoire personnel, vous n'avez pas besoin des privilèges Root. Voir description de --user dans pip.

28voto

Votre problème initial est que pip ne peut pas écrire les logs dans le dossier.

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

Vous devez accéder à un dossier dans lequel le processus invoqué peut écrire comme suit /tmp donc un cd /tmp et invoquer à nouveau la commande fonctionnera probablement mais ce n'est pas ce que vous voulez.

MAIS en fait, pour ce cas particulier (vous ne voulez pas utiliser sudo pour l'installation des paquets python) et qu'il n'est pas nécessaire d'installer des paquets globaux, vous pouvez utiliser la commande --user drapeau comme celui-ci :

pip install --user <packagename>

et ça marchera très bien.

Je suppose que vous avez une installation de python à un seul utilisateur et que vous ne voulez pas vous embêter à lire sur virtualenv (qui n'est pas très conviviale) ou pipenv .

Comme l'ont souligné certaines personnes dans la section des commentaires, l'approche suivante n'est pas une très bonne idée, à moins que vous ne sachiez pas quoi faire et que vous soyez coincé :

Une autre approche pour les paquets globaux comme dans votre cas, vous voulez faire quelque chose comme :

chown -R $USER /Library/Python/2.7/site-packages/

ou plus généralement

chown -R $USER <path to your global pip packages>

10voto

Edgar Points 293

Parce que j'ai eu le même problème, je tiens à souligner qu'en fait le premier commentaire par Brian Cain est la solution au problème "IOError : [Errno 13]"-problème :

Si elle est exécutée dans le répertoire temporaire ( cd /tmp ), l'erreur IOError ne se produit plus si j'exécute la commande suivante sudo pip install foo .

5voto

hd1 Points 11522

Il semble que vos permissions soient faussées. Tapez chown -R markwalker ~ dans le Terminal et essayez pip encore ? Fais-moi savoir si tu es fixé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X