Was sind die Zwecke und Vorteile der Verwendung des Schalters „-m' in Python?

Patricia Arquette
Freigeben: 2024-11-28 04:27:13
Original
285 Leute haben es durchsucht

What are the purposes and benefits of using the `-m` switch in Python?

Was ist der Zweck des Schalters -m?

Hintergrund: Das Problem

Bedenken Sie die folgenden zwei Codeausschnitte:

python -m mymod1 mymod2.py args
Nach dem Login kopieren
python mymod1.py mymod2.py args
Nach dem Login kopieren

In beiden Fällen wird mymod1.py aufgerufen und sys.argv auf gesetzt ['mymod1.py', 'mymod2.py', 'args']. Dies wirft die Frage auf: Was ist der Zweck des Schalters -m?

Die Antwort: Die Rolle von -m

Der Schalter -m erfüllt mehrere wichtige Zwecke:

  1. Python-Code über die Befehlszeile ausführen: Es ermöglicht Ihnen, Python-Code über die Befehlszeile auszuführen, indem Sie den Modulnamen anstelle des Dateinamens angeben. Dies ist nützlich, wenn Sie den Modulnamen, aber nicht den Dateinamen kennen, insbesondere bei Standardbibliotheksmodulen oder Modulen von Drittanbietern.
  2. Fügen Sie ein Verzeichnis zu sys.path hinzu: Python bestimmt Moduldateinamen basierend auf auf seinem sys.path. Der Schalter -m fügt das aktuelle Verzeichnis zu sys.path hinzu, sodass Sie Module aus dem aktuellen Verzeichnis importieren können.
  3. Code mit relativen Importen ausführen: Beim Ausführen von Modulen mit relativen Importen über den Befehl Zeile setzt der Schalter -m die Variable __package__ auf das übergeordnete Modul des angegebenen Modulnamens. Dadurch können relative Importe korrekt funktionieren.

Anwendungsfälle

Zwei bemerkenswerte Anwendungsfälle für den -m-Schalter sind:

  1. Ausführen von Standard Bibliotheks- oder Drittanbietermodule: Wenn Sie den Modulnamen, aber nicht den Dateinamen kennen, können Sie ihn mit -m über den Befehl ausführen Zeile, z. B. python -m http.server.
  2. Lokale Pakete mit Importen ausführen: Sie können mit -m ein lokales Paket ausführen, das absolute oder relative Importe enthält, ohne es installieren zu müssen. Dies ähnelt der Verwendung von pip install -e . im Entwicklungsmodus.

Detaillierte Vergleiche

Um die Unterschiede zwischen Modulausführungsmethoden zu veranschaulichen, finden Sie hier detaillierte Vergleiche:

Ausführung über Import-Anweisung:

  • sys.path ist unverändert.
  • __name__ wird auf den absoluten Modulnamen gesetzt.
  • __package__ wird auf das unmittelbar übergeordnete Paket gesetzt.
  • __init__.py wird für alle Pakete und das Codemodul ausgewertet.

Ausführung über die Befehlszeile mit Dateiname:

  • sys.path wird geändert, um Folgendes einzuschließen übergeordnetes Verzeichnis des Dateinamens.
  • __name__ ist auf „__main__“ gesetzt.
  • __package__ ist auf „Keine“ gesetzt.
  • __init__.py wird für kein Paket ausgewertet.

Ausführung über die Befehlszeile mit Modulname:

  • sys.path wird so geändert, dass es das aktuelle Verzeichnis enthält.
  • __name__ wird auf „__main__“ gesetzt.
  • __package__ wird auf das unmittelbar übergeordnete Paket des Modulnamens gesetzt.
  • __init__.py wird für alle Pakete und den Code ausgewertet Modul.

Fazit

Der Schalter -m ist ein vielseitiges Tool, das die Ausführungsmöglichkeiten von Python verbessert. Es ermöglicht eine bequeme Modulausführung, integriert Funktionen zum Importieren und zur Befehlszeilenausführung und ermöglicht die lokale Paketausführung mit relativen Importen.

Das obige ist der detaillierte Inhalt vonWas sind die Zwecke und Vorteile der Verwendung des Schalters „-m' in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage