Python-Pakete mit pip aktualisieren: Verwenden Sie "sudo" oder "--user"?


7

Ich habe eine Frage zum Installieren / Aktualisieren von Python-Paketen mit dem Tool pip.

Ich kann entweder rennen

sudo pip install -U PACKAGENAME

oder

pip install -U PACKAGENAME --user

Was ist der Unterschied zwischen diesen beiden Befehlen und welchen sollte ich bevorzugen ...

  1. auf meiner eigenen Maschine?
  2. im Installationsskript eines Python-Programms, das ich veröffentliche?


Es gibt verschiedene Möglichkeiten, pipüber anzurufen sudo: entweder sudo -H pip install...oder sudo -H python -m pip install...(Hinweis, der pipgerne mit angerufen wird sudo -H). Das pipmitgelieferte pythonist ab Python 2.7.9 und höher (in der Python2-Serie) und Python 3.4 und höher (für Python 3) verfügbar.
Michael

Es wäre großartig (und im Zusammenhang mit dieser Frage), wenn jemand klären könnte, ob sudo pipauch etwas mit Systemabhängigkeiten geschieht. zB ruft ein sudo pipunter Ubuntu tatsächlich apt-getauf, um etwas zu installieren (oder zu entfernen!)? Wenn ich zum Beispiel ipythonüber pip( /usr/localstandardmäßig) installiere, aber ein älteres bereits über apt-get( /usr/bin) installiert wurde , funktioniert mein System dann nur dann richtig, wenn /usr/local/bines sich in meinem Pfad befindet /usr/bin? Diese Probleme scheinen zur Laufzeit behoben zu sein. Oder macht sudo pipetwas zur Installationszeit etwas Besonderes?
Michael

@michael_n Ich bin mir nicht sicher, aber ich glaube fest daran, dass pipdas nichts damit zu tun hat apt. Das eine benutzt das andere nicht und umgekehrt.
Byte Commander

1
@ByteCommander aber Pip nicht scheint uninstall Systempakete (oder so meldet es bei der Installation Dinge); andere scheinen zuzustimmen, aber dies ist nicht klar dokumentiert (soweit ich das beurteilen
michael

Antworten:


8

Für mich ist der einzige Unterschied der Schemapfad.

Mit sudo wird Ihr Paket installiert in:

/usr/local/lib/python2.7/dist-packages/

Mit werden --usersie in Ihrem $HOMEVerzeichnis installiert in:

$HOME/.local/lib/python2.7/site-packages

Für Ihr eigenes System würde ich sagen, dass es nicht wirklich wichtig ist. Verwenden --userSie diese Option, wenn Sie kein Sudoer-Mitglied sind.

Vermeiden Sie Code, den Sie veröffentlichen --user.


1
Können Sie --userbitte erklären, warum Sie dies vermeiden sollten? Ich habe nur über das Vermeidensudo noch gelesen ...
Byte Commander

@ByteCommander: Für ein Programm, das Sie veröffentlichen, würde ich keine Annahmen über das Zielverzeichnis des Endbenutzers treffen. Es kann mit root ausgeführt werden oder nicht. Ich würde mein Installationsskript also nicht mit Befehlen durcheinander bringen, mit denen Module an mehreren Orten installiert werden.
Sylvain Pineau

1
@ByteCommander Ich sollte hinzufügen (und bestätigen), dass sudo für Module ist, denen Sie vertrauen. Wenn Sie ein neues ausgefallenes Paket testen möchten, versuchen Sie es zuerst mit --user.
Sylvain Pineau

Meine Neigung ist, dass diese Antwort falsch ist . Mit Ruby möchten Sie, dass dies auf einen Benutzer beschränkt ist und sich nicht auf das gesamte System auswirkt. Die gleiche Argumentation gilt hier. Ich bin mir jedoch nicht sicher, also mache ich einfach einen Kommentar. Bitte korrigieren.
Thufir
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.