it-swarm.com.de

Ist es akzeptabel und sicher, pip install unter sudo auszuführen?

Ich habe angefangen, mit meinem Mac Python Pakete auf die gleiche Weise zu installieren, wie ich es mit meinem Windows-PC bei der Arbeit mache, aber auf meinem Mac habe ich häufig Berechtigungen verweigert Fehler beim Schreiben in Protokolldateien oder Site-Packages.

Deshalb habe ich mir überlegt, pip install <package> unter 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 nach einem E/A-Fehler in der Protokolldatei:

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'

pdate Dies lag wahrscheinlich an den Berechtigungen. Der beste Ansatz ist jedoch, virtuelle Umgebungen für Ihre python Projekte zu verwenden. Ausführen von Sudo pip sollte vermieden werden, sofern dies nicht unbedingt erforderlich ist.

103
markwalker_

Verwenden Sie eine virtuelle Umgebung :

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

Sie verwenden Sudo oder erhöhte 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 install.

Als Bonus benötigt virtualenv keine erhöhten Berechtigungen.

98
Burhan Khalid

Ist es akzeptabel und sicher, pip install unter Sudo?

Es ist nicht sicher und wird verpönt - siehe Was sind die Risiken von 'Sudo pip'? Um Python Paket in Ihrem Home-Verzeichnis zu installieren, brauchen Sie nicht Root-Rechte. Siehe Beschreibung von --user Option zu pip.

39
Piotr Dobrogost

Ihr ursprüngliches Problem ist, dass pip die Protokolle nicht in den Ordner schreiben kann.

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

Sie müssen eine CD in einen Ordner legen, in den der aufgerufene Prozess wie /tmp Schreiben kann, sodass ein cd /tmp Und erneutes Aufrufen des Befehls wahrscheinlich funktionieren, aber nicht das ist, was Sie wollen.

[~ # ~] aber [~ # ~] eigentlich für diesen speziellen Fall (Sie möchten nicht Sudo für die Installation von python packages) und keine globalen Paketinstallationen erforderlich, können Sie das Flag --user wie folgt verwenden:

pip install --user <packagename>

und es wird gut funktionieren.

Ich gehe davon aus, dass Sie eine Einzelbenutzer-Installation python python haben und sich nicht mit dem Lesen von virtualenv (was nicht sehr benutzerfreundlich ist) oder pipenv beschäftigen möchten .

Wie einige Leute in den Kommentaren 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:

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

oder allgemeiner

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

Da ich das gleiche Problem hatte, möchte ich betonen, dass eigentlich der erste Kommentar von Brian Cain die Lösung für das "IOError: [Errno 13]" - Problem ist:

Wenn im temporären Verzeichnis ausgeführt (cd /tmp), der IOError tritt nicht mehr auf, wenn ich Sudo pip install foo.

9
Edgar

Ich hatte ein Problem bei der Installation von virtualenvwrapper nach der erfolgreichen Installation von virtualenv.

Mein Terminal hat sich danach beschwert:

pip install virtualenvwrapper

Also habe ich es erfolglos versucht (NICHT EMPFOHLEN):

Sudo pip install virtualenvwrapper

Dann habe ich erfolgreich damit installiert:

pip install --user virtualenvwrapper
5
Mowzer

Es sieht so aus, als wären deine Berechtigungen durcheinander. Art chown -R markwalker ~ im Terminal und versuchen Sie pip noch einmal? Lassen Sie mich wissen, ob Sie sortiert sind.

4
hd1