J'ai commencé à utiliser mon Mac pour installer des packages Python de la même manière que je le fais avec mon PC Windows au travail; Cependant, sur mon Mac, j'ai rencontré de fréquentes erreurs d' autorisation refusées lors de l'écriture dans des fichiers journaux ou des packages de site.
Par conséquent, j'ai 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 d'utilisateur actuel?
Exemple de traceback à partir 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. La course à pied sudo pip
doit être évitée sauf en cas de nécessité absolue.
cd /tmp; sudo pip install foo
» est une solution de contournement adéquate.Réponses:
Utilisez un environnement virtuel :
Vous n'utilisez
sudo
ou des autorisations élevées que lorsque vous souhaitez installer des éléments pour l'installation Python globale à 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 de python.
En prime, virtualenv n'a pas besoin d'autorisations élevées.
la source
sudo pip install
. Disons que j'ai besoin d'installer un package que j'utiliserai dans de nombreux projets ou au niveau du système. Tels que certains outils CLI commepgcli
. Évidemment, je n'ai pas besoin d'environnement virtuel pour cela, je veux l'installer globalement. Dois-je utilisersudo pip install
ou il existe des pratiques plus correctes? Telle est la question.Ce n'est pas sûr et c'est mal vu - voir Quels sont les risques d'exécuter «sudo pip»? Pour installer le package Python dans votre répertoire personnel, vous n'avez pas besoin de privilèges root. Voir la description de l'
--user
option de pip.la source
sudo pip install
connaissais pas les dommages causés par son utilisation. Comment puis-je annuler cette commande ou bloquer l'exécution soussudo
?Votre problème initial est que pip ne peut pas écrire les journaux dans le dossier.
Vous devez placer un cd dans un dossier dans lequel le processus appelé peut écrire comme
/tmp
cecicd /tmp
et ré-invoquer 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 installer des packages python) et pas besoin d'installer des packages globaux, vous pouvez utiliser l'--user
indicateur comme ceci:et cela fonctionnera très bien.
Je suppose que vous avez une installation python python pour un utilisateur et que vous ne voulez pas vous soucier de lire sur virtualenv (qui n'est pas très convivial) ou pipenv .
Comme certaines personnes dans 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 coincé:
Une autre approche pour les packages globaux comme dans votre cas, vous voulez faire quelque chose comme:
ou plus généralement
la source
--user
option pour pip a été donnée comme solution dans ma réponse qui existait déjà lorsque vous avez écrit la vôtre.--user
m'aide!site-packages
répertoire entier de Python système revient à "réparer" une pompe en la frappant avec une clé. Il est protégé pour une raison - vous n'êtes pas censé y installer des éléments . La vraie solution n'est pas de mélanger la distribution système Python avec la programmation au jour le jour. Installez une distribution Python différente (depuis Python.org, Homebrew, Canopy, etc.).Parce que j'ai eu le même problème, je tiens à souligner qu'en fait le premier commentaire de Brian Cain est la solution au problème "IOError: [Errno 13]":
S'il est exécuté dans le répertoire temporaire (
cd /tmp
), IOError ne se produit plus si je courssudo pip install foo
.la source
sudo pip
cette "solution" et installez ainsi des packages avec les privilèges root, ce qui n'est probablement pas ce que vous voulez?/tmp
cela fonctionne, car tout le monde y a un accès en écriture.J'ai eu un problème d'installation
virtualenvwrapper
après l'installation réussievirtualenv
.Mon terminal s'est plaint après avoir fait ceci:
Donc, j'ai essayé sans succès ceci
(NON RECOMMANDÉ):Ensuite, je l'ai installé avec succès avec ceci:
la source
Il semble que vos autorisations soient gâchées. Tapez
chown -R markwalker ~
le terminal et réessayezpip
? Faites-moi savoir si vous êtes trié.la source
chown
donneOperation not permitted
beaucoup de répertoires cachés comme.shsh
& je suppose que cela fonctionne avec des fichiers qu'il peut maintenant définir, mais je verrai ce qui se passe lorsque l'invite cli revient.