Wofür ist die __main__.py
Datei, welche Art von Code sollte ich einfügen und wann sollte ich einen haben?
Oft wird ein Python-Programm ausgeführt, indem eine .py-Datei in der Befehlszeile benannt wird:
$ python my_program.py
Sie können auch ein Verzeichnis oder eine Zip-Datei mit Code erstellen und a einschließen __main__.py
. Dann können Sie einfach das Verzeichnis oder die Zip-Datei in der Befehlszeile benennen und es führt __main__.py
automatisch Folgendes aus :
$ python my_program_dir
$ python my_program.zip
# Or, if the program is accessible as a module
$ python -m my_program
Sie müssen selbst entscheiden, ob Ihre Anwendung von einer solchen Ausführung profitieren könnte.
Beachten Sie, dass ein __main__
Modul normalerweise nicht aus einer __main__.py
Datei stammt. Es kann, aber normalerweise nicht. Wenn Sie ein Skript wie ausführen python my_program.py
, wird das Skript als __main__
Modul anstelle des my_program
Moduls ausgeführt. Dies geschieht auch für Module, die als python -m my_module
oder auf verschiedene andere Arten ausgeführt werden.
Wenn Sie den Namen __main__
in einer Fehlermeldung gesehen haben, bedeutet dies nicht unbedingt, dass Sie nach einer __main__.py
Datei suchen sollten .
python -m program_dir
undpython program_dir
ein bisschen anders: Letzteres läuft nie__init__.py
im Verzeichnis (falls es eines gibt).python3 program_dir
und es lief__init__.py
.python3 dir
Läufe__main__.py
aber nicht__init__.py
, währendpython3 -m dir
läuft beides.__main__.py
der den Import von__init__.py
Wofür ist die
__main__.py
Datei?Beim Erstellen eines Python-Moduls ist es üblich, dass das Modul einige Funktionen (normalerweise in einer
main
Funktion enthalten) ausführt, wenn es als Einstiegspunkt des Programms ausgeführt wird. Dies geschieht normalerweise mit der folgenden allgemeinen Redewendung, die am Ende der meisten Python-Dateien steht:Sie können dieselbe Semantik für ein Python-Paket mit erhalten
__main__.py
. Dies ist eine Eingabeaufforderung für die Linux-Shell$
. Wenn Sie unter Windows keine Bash (oder eine andere Posix-Shell) haben, erstellen Sie diese Dateien einfachdemo/__<init/main>__.py
mit Inhalten zwischen denEOF
s:(In einer Posix / Bash-Shell können Sie die obigen Schritte ohne
<< EOF
s und endEOF
s ausführen , indem Sie am Ende jedes cat-Befehls Ctrl+ D, das Zeichen für das Dateiende, eingeben.)Und nun:
Sie können dies aus der Dokumentation ableiten. Das Dokumentation sagt:
Reißverschluss
Sie können dies auch in eine einzelne Datei packen und wie folgt über die Befehlszeile ausführen. Beachten Sie jedoch, dass komprimierte Pakete keine Unterpakete oder Submodule als Einstiegspunkt ausführen können:
quelle
__main__.py
wird für Python-Programme in Zip-Dateien verwendet. Die__main__.py
Datei wird ausgeführt, wenn die Zip-Datei ausgeführt wird. Wenn die Zip-Datei beispielsweise so war:und der Inhalt von
__main__.py
warWenn wir dann rennen
python test.zip world
würden, würden wirhello world
raus.Die
__main__.py
Datei wird also ausgeführt, wenn Python in einer Zip-Datei aufgerufen wird.quelle
Sie erstellen
__main__.py
inyourpackage
, um es ausführbar zu machen als:quelle
-m
funktioniert, wenn nur das Programm als Modul zugänglich ist, sonst können Sie verwendenpython <yourpackage>
HINWEIS: ohne-m
Optionpackage
?python -m <yourproject>
nicht funktioniert,-m
ist eine redundante Option, aberpython <yourpackage>
gut funktioniert.a
Annahme, dass das Skripta/b/c/__main__.py
...python -m b.c
aus dem Verzeichnis ausgeführt wirda
und die Importe des Hauptskripts relativ zu sinda
. Aberpython b/c
wird aus dem Importumfang dir ausführenc
und so alle Importe wie im Haupt Skript wieimport b.d
fehl.Wenn Ihr Skript ein Verzeichnis oder eine ZIP-Datei anstelle einer einzelnen Python-Datei ist,
__main__.py
wird es ausgeführt, wenn das "Skript" als Argument an den Python-Interpreter übergeben wird.quelle