¿Para qué es el __main__.pyarchivo, qué tipo de código debo poner en él y cuándo debo tener uno?
A menudo, un programa Python se ejecuta nombrando un archivo .py en la línea de comando:
$ python my_program.py
También puede crear un directorio o archivo zip lleno de código e incluir a __main__.py. Luego puede simplemente nombrar el directorio o el archivo zip en la línea de comando, y se ejecuta __main__.pyautomá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 una ejecución como esta.
Tenga en cuenta que un __main__ módulo generalmente no proviene de un __main__.pyarchivo. Puede, pero generalmente no lo hace. Cuando ejecuta un script como python my_program.py, el script se ejecutará como el __main__módulo en lugar del my_programmódulo. Esto también sucede para los módulos que se ejecutan como python -m my_module, o de varias otras maneras.
Si vio el nombre __main__en un mensaje de error, eso no significa necesariamente que deba buscar un __main__.pyarchivo.
python -m program_dirypython program_dirun poco diferente: este último nunca se ejecuta__init__.pyen el directorio (si hay uno).python3 program_diry funcionó__init__.py.python3 dirfunciona__main__.pypero no__init__.py, mientras quepython3 -m direjecuta ambos.__main__.pycual se activó la importación de__init__.py¿Para qué es el
__main__.pyarchivo?Al crear un módulo Python, es común hacer que el módulo ejecute alguna funcionalidad (generalmente contenida en una
mainfunción) cuando se ejecuta como el punto de entrada del programa. Esto normalmente se hace con el siguiente idioma común colocado en la parte inferior de la mayoría de los archivos de Python:Puede obtener la misma semántica para un paquete 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 archivosdemo/__<init/main>__.pycon contenido entreEOFs:(En un shell Posix / Bash, puede hacer lo anterior sin la
<< EOFsy terminandoEOFs ingresando Ctrl+ D, el carácter de fin de archivo, al final de cada comando cat)Y ahora:
Puede derivar esto de la documentación. La documentación dice:
Cremallera
También puede empaquetar esto en un solo archivo y ejecutarlo desde la línea de comando de esta manera, pero tenga en cuenta que los paquetes comprimidos no pueden ejecutar subpaquetes o submódulos como punto de entrada:
fuente
__main__.pyse usa para programas de python en archivos zip. El__main__.pyarchivo se ejecutará cuando se ejecute el archivo zip. Por ejemplo, si el archivo zip era así:y el contenido de
__main__.pywasEntonces, si fuéramos a correr
python test.zip world, saldríamoshello world.Entonces, el
__main__.pyarchivo se ejecuta cuando se llama a python en un archivo zip.fuente
Se crea
__main__.pyenyourpackagepara que sea ejecutable como:fuente
-mfunciona si solo se puede acceder al programa como un módulo, de lo contrario podría usarpython <yourpackage>NOTA: sin-mopciónpackage?python -m <yourproject>no funciona,-mes una opción redundante, peropython <yourpackage>funciona bien.ay asumir el scripta/b/c/__main__.py...python -m b.cse ejecutará desde el directorioay las importaciones del script principal serán relativas aa. Peropython b/cse ejecutará desde el alcance de importación de dircy, por lo tanto, cualquier importación como en el script principalimport b.dfallará.Si su secuencia de comandos es un directorio o un archivo ZIP en lugar de un solo archivo de Python,
__main__.pyse ejecutará cuando la "secuencia de comandos" se pase como argumento al intérprete de Python.fuente