python - que - ¿Qué es__main__.py?
para que sirve if__ name__== ''__ main__ (5)
¿Para qué sirve el archivo __main__.py
, qué tipo de código debo ingresar y cuándo debo tener uno?
¿Para qué sirve el archivo
__main__.py
?
Al crear un módulo de Python, es común hacer que el módulo ejecute alguna funcionalidad (generalmente contenida en una función main
) cuando se ejecuta como el punto de entrada del programa. Esto generalmente se hace con el siguiente idioma común ubicado en la parte inferior de la mayoría de los archivos de Python:
if __name__ == ''__main__'':
# execute only if run as the entry point into the program
main()
Puede obtener la misma semántica para un paquete de Python con __main__.py
. Este es un indicador de shell de Linux, $
, si no tiene Bash (u otro shell de Posix) en Windows, simplemente cree estos archivos en demo/__<init/main>__.py with contents in between the
EOF`s:
$ mkdir demo
$ cat > demo/__init__.py << EOF
print(''demo/__init__.py executed'')
def main():
print(''main executed'')
EOF
$ cat > demo/__main__.py << EOF
print(''demo/__main__.py executed'')
from __init__ import main
main()
EOF
(En un shell de Posix / Bash, puede hacer lo anterior sin los << EOF
s y terminar los EOF
s ingresando Ctrl-D, el carácter de fin de archivo, al final de cada comando cat)
Y ahora:
$ python demo
demo/__main__.py executed
demo/__init__.py executed
main executed
Usted puede derivar esto de la documentación. La documentation dice:
__main__
- entorno de script de nivel superior
''__main__''
es el nombre del ámbito en el que se ejecuta el código de nivel superior. El__name__
un módulo se establece igual a''__main__''
cuando se lee desde una entrada estándar, un script o desde un indicador interactivo.Un módulo puede descubrir si se está ejecutando o no en el ámbito principal al verificar su propio
__name__
, que permite un lenguaje común para ejecutar condicionalmente el código en un módulo cuando se ejecuta como un script o conpython -m
pero no cuando se importa. :
if __name__ == ''__main__'': # execute only if run as a script main()
Para un paquete, se puede lograr el mismo efecto incluyendo un módulo
__main__.py
, cuyo contenido se ejecutará cuando el módulo se ejecute con-m
.
Con cremallera
También puede empaquetar esto en un solo archivo y ejecutarlo desde la línea de comandos de esta manera, pero tenga en cuenta que los paquetes comprimidos no pueden ejecutar subpaquetes o submódulos como punto de entrada:
$ python -m zipfile -c demo.zip demo/*
$ python demo.zip
demo/__main__.py executed
demo/__init__.py executed
main() executed
A menudo, un programa Python se ejecuta al nombrar un archivo .py en la línea de comandos:
$ python my_program.py
También puede crear un directorio o archivo zip lleno de código, e incluir un __main__.py
. Luego, simplemente puede nombrar el directorio o el archivo zip en la línea de comandos, y ejecuta __main__.py
automáticamente:
$ python my_program_dir
$ python my_program.zip
# Or, if the program is accessible as a module
$ python -m my_program
Tendrá que decidir por sí mismo si su aplicación podría beneficiarse de ser ejecutada de esta manera.
Tenga en cuenta que un módulo __main__
generalmente no proviene de un archivo __main__.py
. Puede, pero por lo general no lo hace. Cuando ejecutas un script como python my_program.py
, el script se ejecutará como el módulo __main__
lugar del módulo my_program
. Esto también sucede con los módulos que se ejecutan como python -m my_module
, o de varias otras formas.
Si vio el nombre __main__
en un mensaje de error, eso no significa necesariamente que deba buscar un archivo __main__.py
.
Crea __main__.py
en tu yourpackage
para hacerlo ejecutable como:
$ python -m yourpackage
Si su script es un directorio o un archivo ZIP en lugar de un solo archivo de python, __main__.py
se ejecutará cuando el "script" se pase como un argumento al intérprete de python.
__main__.py
se utiliza para los programas de Python en archivos zip. El archivo __main__.py
se ejecutará cuando se ejecute el archivo zip. Por ejemplo, si el archivo zip era como tal:
test.zip
__main__.py
y el contenido de __main__.py
era
import sys
print "hello %s" % sys.argv[1]
Luego, si tuviéramos que ejecutar python test.zip world
, obtendríamos hello world
out.
Por lo tanto, el archivo __main__.py
ejecuta cuando se llama a python en un archivo zip.