web-dev-qa-db-fra.com

Est-il acceptable et sûr d’exécuter pip install sous sudo?

J'ai commencé à utiliser mon Mac pour installer Python comme je le fais avec mon PC Windows au travail. Cependant, sur mon Mac, j'ai rencontré fréquemment autorisations refusées lors de l'écriture dans des fichiers journaux ou des packages de site.

Par conséquent, j’ai pensé à exécuter pip install <package> sous Sudo, mais s’agit-il d’une utilisation sûre/acceptable de Sudo, étant donné que j’aimerais simplement que ce logiciel soit installé sous mon compte d’utilisateur actuel?

Exemple de trace 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 Cela était probablement dû aux autorisations, mais la meilleure approche consiste à utiliser des environnements virtuels pour vos projets python. Exécuter Sudo pip devrait être évité sauf si absolument nécessaire.

103
markwalker_

Utilisez un environnement virtuel :

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

Vous utilisez uniquement Sudo ou des autorisations élevées lorsque vous souhaitez installer des éléments pour l'installation globale Python à l'échelle du système.

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

En plus, virtualenv n'a pas besoin d'autorisations élevées.

98
Burhan Khalid

Est-il acceptable et sûr d’exécuter pip install sous Sudo?

Ce n'est pas sûr et c'est mal vu - voir Quels sont les risques de 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 option à piper.

39
Piotr Dobrogost

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

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

Vous devez vous connecter à un dossier dans lequel le processus appelé peut écrire comme /tmp afin qu'un cd /tmp et une nouvelle invocation de la commande fonctionnent probablement, mais ne correspondent pas à vos souhaits.

MAIS en fait pour ce cas particulier (vous ne voulez pas utiliser Sudo pour installer les packages python) et non Si vous avez besoin d'installations globales, vous pouvez utiliser le drapeau --user comme ceci:

pip install --user <packagename>

et cela fonctionnera très bien.

Je suppose que vous avez une installation utilisateur python python et que vous ne voulez pas vous soucier de lire à propos de virtualenv (qui n'est pas très convivial) ou pipenv .

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

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>
23

Parce que j’avais le même problème, je tiens à souligner qu’en réalité le premier commentaire de Brian Cain est la solution à "IOError: [Errno 13]" - problème:

S'il est exécuté dans le répertoire temporaire (cd /tmp), l'erreur IOError ne se produit plus si j'exécute Sudo pip install foo.

9
Edgar

J'ai eu un problème pour installer virtualenvwrapper après avoir installé avec succès virtualenv.

Mon terminal s'est plaint après que j'ai fait ceci:

pip install virtualenvwrapper

Donc, j'ai essayé sans succès (NON RECOMMANDÉ):

Sudo pip install virtualenvwrapper

Ensuite, je avec succès l'installa avec ceci:

pip install --user virtualenvwrapper
5
Mowzer

Il semble que vos autorisations soient gâchées. Tapez chown -R markwalker ~ dans le terminal et essayez à nouveau pip? Faites-moi savoir si vous êtes triés.

4
hd1