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.