Ich bin neu in Ubuntu, also bitte trage mich. Ich installierte pip
diesen Befehl: sudo apt-get -y install python-pip
. Dann habe ich installiert NLTK auf ihrer Website mit dem Befehl, die lautete: sudo pip install -U nltk
. Aber dann bin ich auf diese Frage gestoßen , die besagt, dass alles, was ich getan habe, eine "gebrochene Praxis" war. Die Linie, die mich am meisten beeindruckte, war, dass die Verwendung von sudo pip
Natur aus falsch ist und dass pip
zu viel Kraft die Dateien des Betriebssystems beschädigen kann. Kann jemand diese Behauptung bestätigen?
Hinweis - Ich habe nur verwendet, sudo
weil ich bei der Ausführung des Befehls apt-get -y install python-pip
2 Fehler erhielt:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
package-management
permissions
python
pip
was was Was
quelle
quelle
sudo pip install
sind von Natur aus falsch. - von stackoverflow.com/a/33004920/95735sudo pip install
ist so schlecht wiecurl "some-url" | sudo bash
installiert. In ähnlicher Weise gab es einige Male, in denen einige Entwicklersudo pip install
Abhängigkeiten von ihrer Workstation installierten, dann fehlerhaften Code in das Repository eincheckten, weil die Dateirequirements.txt
odersetup.py
fehlte, was auch immer sie installierten, und alle anderen mussten herausfinden, welche Abhängigkeit benötigt wurde während der Typ im Urlaub war.Antworten:
Beide
sudo pip install
und seine andere gemeinsame Variantesudo -H pip install
sollten nichtpip
empfohlen werden, da es ein Sicherheitsrisiko darstellt, Root-Berechtigungen für die Installation von Python-Paketen von PyPI (Python Package Index) zu verwenden.Von https://stackoverflow.com/a/21056000/486919 (Schwerpunkt Mine):
Wie unter https://security.stackexchange.com/a/79327/8761 erwähnt , muss beachtet werden, dass jeder Python-Pakete, auch böswillige, auf PyPI hochladen kann.
Kurz gesagt, in Übereinstimmung mit dem Prinzip der geringst möglichen Privilegien , verwenden Sie nicht
sudo
mitpip
Python - Pakete von PyPI zu installieren , wenn Sie unbedingt benötigen. Erwägen Sie stattdessen die Verwendungpip install --user
(beachten Sie, dass derzeit unter Ubuntupip install
keinesudo
oder keine zusätzlichen Flags / Optionen standardmäßig verwendet werdenpip install --user
) oder virtueller Umgebungen (wie z. B.virtualenv
). Wenn Sie Leute sehen, diesudo pip
oder empfehlensudo -H pip
, bitten Sie sie, dies nicht zu tun.quelle
sudo pip install
kann "alte" vom System installierte Python-Pakete deinstallieren, was das Aktualisieren oder Deinstallieren dieser Betriebssystempakete erschwert.sudo pip uninstall
hilft hier nicht, weil es das neue Paket entfernt, aber die Dateien vom alten nicht wiederherstellt. (Mein Kollege R. Zagar geht in einer anderen Antwort näher darauf ein.)Sie müssen verwenden
sudo
pip installieren mit apt (sudo apt install python-pip
), aber wie in angegeben edwinksl Antwort sollten Sie nicht verwenden ,sudo
Pakete zu installieren , um mit pip , sollten Siepip install --user <package>
nur für Ihre Benutzer zu installieren, oder eine Verwendung virtualenv noch weiter , um den Umfang des Pakets einschränken .Apt installiert Pakete aus Ubuntus Repositorys, während pip vom Benutzer hochgeladene Pakete aus PyPi installiert, die bösartig sein könnten.
quelle
Und für eine mildere Antwort:
sudo apt-get install ...
, genau so wurde das Tool entwickelt, um zu funktionieren.sudo [-H]
withpip install
ist sowohl möglich als auch optional, je nachdem, was genau Sie tun möchten (und daher "Kontroverse").Eines der Mottos von Python lautet: "Es sollte einen - und am besten nur einen - offensichtlichen Weg geben, dies zu tun." Und wie die meisten Mottos ist es scheinbar bei jeder Gelegenheit mit sardonischer Freude gebrochen. (Deshalb gibt es Mottos, denke ich.) Leider besteht das Python-Ökosystem meiner bescheidenen Meinung nach aus vielen widersprüchlichen "harten und schnellen" Regeln, die niemals gebrochen werden dürfen ... außer wenn "yada yada yada" (Teufel, Einzelheiten usw). In fast allen Fällen liegt dies an der historischen Entwicklung der Sprache und der Tools (und wer möchte / braucht eine Geschichtsstunde, wenn er nur mit seiner Arbeit weitermachen möchte) - kann aber auch an Unterschieden in Mac / Win / * Nix-Plattformen (zB Unix / Linux hat eine ähnliche Mentalität,Nehmen Sie all diese "gebrochenen Praktiken" und "von Natur aus falschen" Frachtkultisten mit einer riesigen Prise Salz. Einige meinen es tatsächlich gut. (Andere sind nur gut gemein.)
Zuallererst bevorzugen Sie fast immer eine virtuelle Umgebung, anstatt einfache "Einzelplatzinstallationen" durchzuführen, denn in Wirklichkeit ist dies wahrscheinlich das, was Sie am Ende brauchen werden. Fangen Sie also gleich damit an. Wie das genau gemacht wird, hängt davon ab (siehe Python-Motto oben). Wenn Sie Conda verwenden (hauptsächlich für Mac und Windows), wird es mit Conda eingerichtet . Bei der Verwendung von „reinem“ Python [sic] , es hängt davon ab , welche Version und welcher Python utils Sie haben, aber virtualenvwrapper ist ziemlich praktisch.
Zweitens, nur als Gegenbeispiel zur "never sudo" -Regel, können Sie es vorziehen
sudo -H pip install -U numpy
, was vollkommen in Ordnung und sogar vorteilhaft ist, da es einem erlaubt, das Herunterladen / Neuinstallieren / Verwalten großer Bibliotheken zu vermeiden, wo Sie nur wollen / brauche eine version, in jeder virtualenv separat. Große, beliebte Frameworks wie Scikit-Learn, NumPy, Matplotlib, SciPy, Pandas usw. können einmalig installiert und in verschiedenen Umgebungen wiederverwendet werden . Ihr lokaler freundlicher Systemadministrator kann diese möglicherweise für jeden Benutzer auf einem System installieren. Dies geschieht natürlich auch übersudo
, z. B. für kompliziertere Installationen wie TensorFlow.Und wenn Sie eine zufällige Bibliothek von Drittanbietern installieren, die dies und das tut (Twitter-API, Text-Munging, Code-Formatierung usw.), dann bin ich vollkommen einverstanden - installieren Sie sie nicht als root über sudo. Sicher, installieren Sie es als Ihr aktueller Benutzer. Denken Sie jedoch daran, dass Ihr Benutzerkonto alle wichtigen Informationen enthält .
quelle
malloc
wo du es nicht brauchst. Das--user
Flag erfüllt die Anforderungen des OP und erfordert keine besonderen Berechtigungen. Sie untergraben dabei Ihre guten Argumente in Bezug auf virtualenv ... nichts "Frachtkultist" an alledem .Mit "sudo pip install" können und werden die von Ihrem Betriebssystemanbieter bereitgestellten Python-Inhalte überschrieben. In diesem Fall wird für die betroffenen Anbieterpakete keine "rpm --verify" -Verifizierung durchgeführt, und Ihre Pakete scheinen beschädigt zu sein.
Möchten Sie Systemverwaltungstools verwenden, die Ihr Betriebssystemhersteller getestet hat , oder sind nicht getestete Komponenten zulässig, die Sie aus dem Internet heruntergeladen haben?
Wenn, nicht wenn, ein bösartiges Paket auf PyPI hochgeladen wird ... werden Leute, die "sudo pip install" verwenden, diese bösartige Payload mit vollen Systemrechten ausführen. Willst du das? (#principleofleastprivileg)
Wenn es sich nur um Ihren Laptop handelt und Sie nur ein paar Katzenbilder riskieren, ist das Risiko wahrscheinlich gering. Wenn es sich jedoch um ein Mehrbenutzersystem handelt, wird das Risiko jetzt mit N multipliziert Ein System, das Wert hat, oder eine Systemverfügbarkeit oder -zuverlässigkeit, haben Wert, dann steigen auch die Risiken.
Bitte wählen Sie Ihr eigenes Abenteuer aus, holen Sie jedoch die Einwilligung der anderen Benutzer ein, die von Ihrer Wahl betroffen sein könnten. Sie fühlen sich möglicherweise nicht mit dem gleichen Risiko wie Sie wohl.
quelle
Um diese Antworten zu ergänzen: Ich kenne Ubuntu nicht, aber unter Fedora kann ich mithilfe des
sudo dnf install python3-numpy
Formats VIELE für mich nützliche Pakete installieren . Dies hat nicht den Nachteil, dass es unsicher ist (der Distributor hat Pakete validiert), sondern ermöglicht Ihnen auch die systemweite Installation. Der einzige Nachteil ist, dass die Distribution-Repo-Versionen den Paketen in PyPI möglicherweise etwas hinterherhinken.quelle
Nein, das ist richtig. Ich kann diese Behauptung nicht bestätigen. Ich benutze immer
sudo -H
mitpip
.pip
kann Betriebssystemdateien nur so stark beschädigen wieapt
. Nur nichtsudo
mit verwenden,pip
wenn Sie nur für diesen Benutzer installieren möchten.quelle
pip
systemweit installieren ? Wenn Sie ein Sysadmin sind, ist das vielleicht eine andere Geschichte.