Verwenden Sie __main__.py

Warum __init__.py benötigt wird, weiß wahrscheinlich jeder Pythonist, aber was ist mit __main__.py ? Ich habe viele Projekte gesehen, entweder in Arbeit oder auf Github, die diese magische Datei nicht verwenden, obwohl sie ihr Leben leichter machen könnten. Meiner Meinung nach ist __main__.py der beste Weg, um mit Python-Modulen zu interagieren, die aus mehreren Dateien bestehen.


Aber machen wir es zuerst richtig: Wie fĂŒhren die meisten Leute ihre Python-Skripte aus?


Sobald Sie ein Programm geschrieben haben, das Sie sowohl als importiertes Modul als auch als ĂŒber die Befehlszeile gestartetes Tool verwenden möchten. Sie wissen höchstwahrscheinlich, was in diesem Fall normalerweise getan wird:


if __name__ == '__main__': main(sys.argv) 

Wenn Sie das Skript dem Interpreter zufĂŒhren, erhĂ€lt die magische globale Variable __name__ den Wert __main__ . So erfahren wir, dass dies kein Import, sondern ein Start ist. Zum Beispiel:


 python myapp.py 

Und das funktioniert hervorragend fĂŒr eine einzelne Datei.


Das Problem


Aber wenn Sie wie ich sind, möchten Sie nicht, dass Ihre gesamte Anwendung in einer einzigen Datei zusammengefasst wird. Das Aufteilen der Logik in verschiedene Dateien vereinfacht die Bearbeitung und UnterstĂŒtzung. Zum Beispiel:


 . ├── README.me ├── requirements.txt ├── setup.py └── src ├── __init__.py ├── client.py ├── logic.py ├── models.py └── run.py 

Aber der Benutzer, der das Projekt aus dem Repository geklont hat, wird nicht verstehen - welche dieser Dateien ist die Hauptdatei? Ist run.py wirklich? Oder vielleicht client.py ? Wo kann man nach der bekannten Zeichenfolge suchen, wenn __name__ == '__main__' ? Hier kann sich __main__.py beweisen.


__main__.py


Die Datei __main__.py wird aufgerufen, wenn das Projekt mit dem Modulflag - -m beginnt. Dies ist sehr praktisch, wenn der Code als Modul und zum Starten ĂŒber die Konsole vorgesehen ist. Stellen Sie sich diese Datei als einen Ort vor, an dem Sie alles ablegen können , was Sie normalerweise in __name__ == ' __main__' einfĂŒgen . Lassen Sie uns das Projekt gegenĂŒber dem obigen Beispiel entsprechend Ă€ndern:


 . ├── README.me ├── requirements.txt ├── setup.py └── myapp ├── __init__.py ├── __main__.py ├── client.py ├── logic.py ├── models.py 

Und voila! Jetzt können Sie das Projekt einfach als regulÀres Modul starten.


 python -m myapp 

__main__.py wird automatisch ausgefĂŒhrt. Dies ist der perfekte Ort, um die Befehlszeilenschnittstelle zu hosten und Eingabeargumente zu verarbeiten!

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


All Articles