Ich habe begonnen, meinen Mac zu verwenden, um Python-Pakete auf die gleiche Weise zu installieren, wie ich es mit meinem Windows-PC bei der Arbeit mache. Auf meinem Mac habe ich jedoch beim Schreiben in Protokolldateien oder Site-Pakete häufig Fehler festgestellt, denen die Berechtigung verweigert wurde .
Daher habe ich darüber nachgedacht, pip install <package>
unter zu laufen, sudo
aber ist das eine sichere / akzeptable Verwendung von sudo, wenn man bedenkt, dass ich nur möchte, dass dies unter meinem aktuellen Benutzerkonto installiert wird?
Beispiel für ein Traceback von einem Protokolldatei-E / A-Fehler:
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'
Update
Dies war wahrscheinlich auf Berechtigungen zurückzuführen. Der beste Ansatz ist jedoch die Verwendung virtueller Umgebungen für Ihre Python-Projekte. Laufen sudo pip
sollte vermieden werden, es sei denn, dies ist unbedingt erforderlich.
cd /tmp; sudo pip install foo
' eine angemessene Problemumgehung ist.Antworten:
Verwenden Sie eine virtuelle Umgebung :
Sie verwenden
sudo
oder erhöhen Berechtigungen nur, wenn Sie Inhalte für die globale, systemweite Python-Installation installieren möchten.Verwenden Sie am besten eine virtuelle Umgebung, die Pakete für Sie isoliert. Auf diese Weise können Sie herumspielen, ohne die globale Python-Installation zu verschmutzen.
Als Bonus benötigt virtualenv keine erhöhten Berechtigungen.
quelle
sudo pip install
. Angenommen, ich muss ein Paket installieren, das ich in vielen Projekten oder auf Systemebene verwenden werde. Wie zum Beispiel ein CLI-Tool wiepgcli
. Natürlich brauche ich keine virtuelle Umgebung dafür, ich möchte sie global installieren. Sollte ich verwendensudo pip install
oder gibt es einige korrektere Praktiken? Das ist hier die Frage.Es ist nicht sicher und wird verpönt - siehe Was sind die Risiken, wenn man 'sudo pip' betreibt? Um das Python-Paket in Ihrem Home-Verzeichnis zu installieren, benötigen Sie keine Root-Rechte. Siehe Beschreibung der
--user
Option zum Pip.quelle
sudo pip install
keine Schäden bei der Verwendung. Wie kann ich diesen Befehl oder diese Blockierung rückgängig machen, um sie auszuführensudo
?Ihr ursprüngliches Problem ist, dass pip die Protokolle nicht in den Ordner schreiben kann.
Sie müssen in einen Ordner cd, in den der aufgerufene Prozess so schreiben kann,
/tmp
dass eincd /tmp
erneuter Aufruf des Befehls wahrscheinlich funktioniert, aber nicht das ist, was Sie wollen.ABER tatsächlich für diesen speziellen Fall (Sie möchten nicht
sudo
für die Installation von Python-Paketen verwenden) und keine Notwendigkeit für globale Paketinstallationen können Sie das--user
Flag wie folgt verwenden:und es wird gut funktionieren.
Ich gehe davon aus, dass Sie eine Python-Python-Installation für einen Benutzer haben und sich nicht mit dem Lesen von virtualenv (was nicht sehr benutzerfreundlich ist) oder pipenv beschäftigen möchten .
Wie einige Leute im Kommentarbereich darauf hingewiesen haben, ist der nächste Ansatz keine sehr gute Idee, es sei denn, Sie wissen nicht, was Sie tun sollen, und stecken fest:
Ein anderer Ansatz für globale Pakete wie in Ihrem Fall möchten Sie etwas tun wie:
oder allgemeiner
quelle
--user
Option für pip wurde als Lösung in meiner Antwort angegeben, die bereits vorhanden war, als Sie Ihre geschrieben haben.--user
hilft mir!site-packages
Verzeichnis von Python ähnelt dem "Reparieren" einer Pumpe durch Schlagen mit einem Schraubenschlüssel. Es ist aus einem bestimmten Grund geschützt - Sie sollten dort nichts installieren . Die wirkliche Lösung besteht nicht darin, die Python-Verteilung des Systems mit der täglichen Programmierung zu mischen. Installieren Sie eine andere Python-Distribution (von Python.org, Homebrew, Canopy usw.).Da ich das gleiche Problem hatte, möchte ich betonen, dass der erste Kommentar von Brian Cain die Lösung für das Problem "IOError: [Errno 13]" ist:
Bei Ausführung im temporären Verzeichnis (
cd /tmp
) tritt der IOError nicht mehr auf, wenn ich ihn ausführesudo pip install foo
.quelle
sudo pip
diese "Lösung" und installieren daher Pakete mit Root-Rechten. Was ist wahrscheinlich nicht das, was Sie wollen?/tmp
, funktioniert es, weil jeder dort Schreibzugriff hat.Ich hatte ein Problem bei der Installation
virtualenvwrapper
nach erfolgreicher Installationvirtualenv
.Mein Terminal hat sich danach beschwert:
Also habe ich dies erfolglos versucht
(NICHT EMPFOHLEN):Dann habe ich es erfolgreich damit installiert:
quelle
Es sieht so aus, als wären Ihre Berechtigungen durcheinander. Geben Sie
chown -R markwalker ~
das Terminal ein und versuchen Sie espip
erneut? Lassen Sie mich wissen, wenn Sie sortiert sind.quelle
chown
gibtOperation not permitted
auf viele versteckte Verzeichnisse wie.shsh
& ich nehme an, es funktioniert durch Dateien, die es jetzt setzen kann, aber ich werde sehen, was passiert, wenn die cli-Eingabeaufforderung zurückkehrt.