Warum sollte man python -m pip verwenden?

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.

Source: https://habr.com/ru/post/de475392/


All Articles