Hallo nochmal. In Erwartung des Starts eines neuen Themas für den Kurs Maschinelles Lernen möchten wir eine Übersetzung eines Artikels veröffentlichen, der ziemlich indirekt mit ML zusammenhängt, aber für unsere Blog-Abonnenten sicherlich nützlich sein wird.

Mariatta , eine kanadische Entwicklerin, fragte auf Twitter bei
python -m pip nach, ob sie über diese Redewendung sprechen und erklären
dürfe , wie sie funktioniert.
Ich habe kürzlich erfahren, dass Sie python -m pip anstelle der üblichen pip-Installation schreiben müssen, aber jetzt kann ich mich nicht erinnern, von wem ich gehört habe. Vermutlich von @brettsky oder @zooba . Hat einer von euch einen Blogbeitrag, damit ich ihn mit Lesern teilen kann?
- Mariatta ( @mariatta
), 29. Oktober 2019 ( https://twitter.com/mariatta/status/1189243515739561985?ref_src=twsrc%5Etfw )
Ich bin mir nicht sicher, was ich Mariatta über
python -m pip gesagt habe, aber es besteht jede Chance, dass ich es war, da ich darum gebeten habe, dass diese Anleitung zum Installieren von Paketen mit
PyPI seit 2016
so geschrieben wird. Dieser Artikel sollte also erklären, was
python -m pip ist und warum Sie es verwenden sollten, wenn Sie
pip starten.
Was ist Python-m Pip?
Für den Anfang führt
python -m pip pip mit der Version von Python aus, die Sie für die python-Anweisung angegeben haben. Daher bedeutet
/usr/bin/python3.7 -m pip
dass Sie
pip für den Interpreter
/usr/bin/python3.7
der sich in
/usr/bin/python3.7
. Sie können die
Dokumentation zum
-m
Flag lesen, wenn Sie nicht wissen, wie es funktioniert (es ist übrigens äußerst nützlich).
Warum sollte man python -m pip anstelle von pip / pip3 verwenden?
Sie können sagen: "Okay, aber warum kann ich
pip nicht einfach durch Ausführen des Befehls
pip verwenden ?" Die Antwort lautet: "Ja, aber Sie werden weniger Kontrolle darüber haben." Ich werde anhand eines Beispiels erklären, was "weniger kontrollieren" bedeutet.
Angenommen, ich habe zwei Versionen von Python installiert, zum Beispiel Python 3.7 und 3.8 (dies ist sehr häufig bei Leuten, die unter Mac OS oder Linux arbeiten, ganz zu schweigen von der Tatsache, dass Sie wahrscheinlich mit Python 3.8 spielen wollten und dies bereits getan haben Python 3.7). Wenn Sie also
pip in das Terminal
eingeben , für welchen Python-Interpreter installieren Sie das Paket?
Ohne detailliertere Informationen kennen Sie die Antwort nicht. Zunächst müssen Sie verstehen, was in PATH enthalten ist,
/usr/bin
,
/usr/bin
geht zuerst oder
/usr/local/bin
(die am häufigsten verwendeten Installationsorte für Python sind normalerweise
/usr/local/
). Sie erinnern sich also daran, wo Sie Python 3.7 und 3.8 installiert haben und dass es sich um verschiedene Verzeichnisse handelte, und Sie werden wissen, was zuerst in PATH enthalten war. Angenommen, Sie haben beide manuell installiert, möglicherweise war Python 3.7.3 bereits auf Ihrem System vorinstalliert, und Sie haben Python 3.7.5 installiert. In diesem Fall werden beide Python-Versionen in
/usr/local/bin
installiert. Kannst du mir jetzt sagen, an was
Pip jetzt angehängt ist?
Sie kennen die Antwort nicht. Wenn Sie nicht wissen, wann jede Version installiert wurde, und wissen, dass die neueste Version von
pip in
/usr/local/bin/pip
, aber nicht wissen, welcher Interpreter für den Befehl
pip verwendet wird . Jetzt können Sie sagen: "Ich installiere immer die neuesten Versionen, was bedeutet, dass Python 3.8.0 zuletzt installiert wird, da es neuer als 3.7.5 ist." Ok, aber was passiert, wenn Python 3.7 herauskommt .6? Ihr
Pip wird nicht mehr in Python 3.8, sondern in Python 3.7 verwendet.
Wenn Sie
python -m pip mit dem von Ihnen benötigten Python-Interpreter verwenden, verschwindet die Mehrdeutigkeit. Wenn ich
python3.8 -m pip schreibe, weiß ich genau, welcher
pip verwendet wird und dass das Paket für Python 3.8 installiert wird (dasselbe würde passieren, wenn ich auf python3.7 aufmerksam machen würde).
Wenn Sie Windows verwenden, haben Sie einen zusätzlichen Anreiz,
python -m pip zu verwenden , da es
pip ermöglicht
, sich selbst
zu aktualisieren. Meistens, weil
pip.exe ausgeführt wird, wenn Sie
pip install --upgrade pip schreiben. Zu diesem Zeitpunkt können Sie
pip.exe in Windows nicht erneut installieren. Wenn Sie jedoch
python-m pip install --upgrade pip ausführen , können Sie dieses Problem
umgehen , indem Sie
python.exe und nicht
pip.exe starten .
Und was passiert, wenn ich mich in einer aktivierten Umgebung befinde?
Wenn ich den Leuten das Wesentliche dieses Artikels erkläre, gibt es normalerweise immer jemanden, der sagt: "Ich benutze immer die virtuelle Umgebung, und das trifft auf mich nicht zu." Nun, für den Anfang wäre es IMMER gut, eine virtuelle Umgebung zu verwenden! (Ich werde in einem meiner nächsten Artikel erklären, warum ich das glaube!) Aber um ehrlich zu sein, würde ich immer noch auf der Verwendung von
python -m pip bestehen , auch wenn dies streng genommen nicht erforderlich ist.
Wenn Sie Windows verwenden, möchten Sie zunächst immer noch
python-m pip verwenden, damit Sie
pip in Ihrer Umgebung aktualisieren können.
Zweitens, selbst wenn Sie ein anderes Betriebssystem verwenden, würde ich sagen, dass Sie immer noch
python-m pip verwenden müssen , da es unabhängig von der Situation funktioniert. Er warnt Sie vor einem Fehler, wenn Sie vergessen, die Umgebung zu aktivieren, und jeder, der Sie überwacht, wird die Best Practices anwenden. Ich persönlich glaube nicht, dass das Einsparen von 10 Tastenanschlägen ein erheblicher Preis ist, wenn keine bewährten Methoden angewendet werden. Dieser Befehl hilft Ihnen auch dabei, Fehler beim Schreiben von Automatisierungsskripten zu vermeiden, die offensichtlich falsche Vorgänge ausführen, wenn Sie vergessen, die Umgebung zu aktivieren.
Persönlich verwende ich immer
-m
, wenn ich ein Tool verwende, dessen Arbeit davon abhängt, welcher Interpreter
-m
, unabhängig davon, ob die virtuelle Umgebung aktiviert ist oder nicht. Für mich ist es immer wichtig zu verstehen, welchen Python-Interpreter ich verwende.
Nutze IMMER die Umwelt! Setzen Sie nicht alles hintereinander in den globalen Interpreter!
Wenn wir über das Vermeiden von Verwirrung bei der Installation in Python sprechen, möchte ich betonen, dass wir nichts im globalen Python-Interpreter installieren sollten, wenn wir lokal arbeiten (Container sind eine ganz andere Sache)! Wenn dies das vorinstallierte Python Ihres Systems ist, und Sie eine inkompatible Version der Bibliothek installieren, auf die sich Ihr Betriebssystem stützt, wird das System tatsächlich beschädigt.
Aber auch wenn Sie eine Kopie von
Python separat für sich installieren, empfehle ich dringend, es nicht direkt in der lokalen Entwicklung zu installieren. Letztendlich werden Sie in Ihren Projekten verschiedene Pakete verwenden, die miteinander in Konflikt stehen können, und Sie werden keine klare Vorstellung von den Abhängigkeiten innerhalb Ihrer Projekte haben. Es ist viel besser, Umgebungen zu verwenden, um einzelne Projekte und Tools für sie voneinander zu isolieren. Die Python-Community verwendet zwei Arten von Umgebungen: virtuelle Umgebungen und Conda-Umgebungen. Es gibt sogar eine spezielle Möglichkeit, Python-Tools isoliert zu installieren.
Wenn Sie ein Tool installieren müssen
Für eine
eigenständige Installation des Tools kann ich die Verwendung von
pipx empfehlen. Jedes Tool erhält eine eigene virtuelle Umgebung, um Konflikte mit anderen zu vermeiden. Wenn Sie also nur eine Installation haben möchten, z. B.
Black , können Sie arbeiten, ohne versehentlich Ihre einzige Installation von
mypy zu beschädigen .
Wenn Sie eine Projektumgebung benötigen (und Conda nicht verwenden)
Wenn Sie eine Umgebung für ein Projekt erstellen müssen,
greife ich persönlich immer auf
venv und virtuelle Umgebungen zurück. Es ist in
stdlib Python enthalten und steht daher immer mit
python-m venv zur Verfügung (es sei denn, Sie verwenden Debian oder Ubuntu. In diesem Fall müssen Sie möglicherweise das Paket
python3-venv apt installieren). Ein bisschen Geschichte: Ich habe den alten
pyvenv- Befehl gelöscht, den Python installiert hat, um virtuelle Umgebungen mit
venv zu erstellen, aus den gleichen Gründen, aus denen Sie
Python -m pip anstelle von
pip verwenden müssen . Das heißt, es ist nicht klar, für welchen Interpreter Sie die virtuelle Umgebung mit dem alten
Befehl pyvenv erstellt haben . Und denken Sie daran, dass Sie die Umgebung nicht aktivieren müssen, um den darin enthaltenen Interpreter zu verwenden, da
.venv/bin/python
genauso funktioniert wie das Aktivieren der Umgebung und das Eingeben des Befehls
python .
Einige Entwickler bevorzugen auch
heute noch
virtualenv , da es in Python 2 verfügbar ist und einige zusätzliche Funktionen bietet. Persönlich habe ich wenig Interesse an zusätzlichen Funktionen.
Wenn ich
venv integriert
habe , muss ich nicht
pipx verwenden , um
virtualenv auf jeder Maschine zu installieren. Aber wenn
venv nicht Ihren Anforderungen entspricht und Sie eine virtuelle Umgebung möchten,
prüfen Sie, ob
virtualenv das bietet, was Sie benötigen.
Wenn Sie conda verwenden
Wenn Sie
conda verwenden , können Sie
conda- Umgebungen verwenden, um den gleichen Effekt zu erzielen, den von
venv bereitgestellte virtuelle Umgebungen bieten können. Ich werde nicht darauf eingehen, ob Sie conda oder venv in Ihrer speziellen Situation verwenden müssen, aber wenn Sie
conda verwenden , wissen Sie, dass Sie
Conda- Umgebungen für Ihre Arbeit erstellen können (und sollten), anstatt alles in Ihrer eigenen zu installieren Systeminstallation. So erhalten Sie ein klares Verständnis für die Abhängigkeiten Ihres Projekts (und dies ist ein guter Grund,
Miniconda anstelle von vollständiger
Anaconda zu verwenden , da erstere weniger als ein Zehntel des Volumens der letzteren
ausmacht ).
Es gibt immer Container
Das Arbeiten in einem Container ist eine Möglichkeit, überhaupt nicht mit der Umwelt umzugehen, da Ihre gesamte „Maschine“ zu einer separaten Umgebung wird. Bis Sie Python im Containersystem installiert haben, sollten Sie sicher eine globale Installation durchführen können, damit Ihr Container einfach und unkompliziert bleibt.
Ich wiederhole, dass Sie die Essenz wirklich verstehen ...
Installieren Sie nichts in Ihrem globalen Python-Interpreter! Versuchen Sie immer, die Umgebung für die lokale Entwicklung zu nutzen!Ich kann nicht mehr sagen, wie oft ich jemandem helfen musste, der dachte, dass pip in einem Python-Interpreter installiert ist, aber tatsächlich in einem anderen. Und diese unermessliche Menge gilt auch für jene Momente, in denen die Leute das gesamte System kaputt machten oder sich fragten, warum sie nicht etwas installieren konnten, das im Widerspruch zu einer anderen Einstellung stand, die sie zuvor für ein anderes Projekt festgelegt hatten, usw. aufgrund der Tatsache, dass sie sich nicht die Mühe gemacht haben, die Umgebung auf ihrem lokalen Computer zu konfigurieren.
Verwenden Sie daher
python-m pip und versuchen Sie immer, die Umwelt zu nutzen, damit Sie und ich ruhig schlafen können.