Use __main__.py

¿Por qué se necesita __init__.py , probablemente cualquier pitonista lo sabe, pero qué pasa con __main__.py ? He visto bastantes proyectos trabajando o en Github que no usan este archivo mágico, aunque podrían facilitarles la vida. En mi opinión, __main__.py es la mejor manera de interactuar con los módulos de Python que consisten en varios archivos.


Pero hagámoslo bien primero: ¿cómo ejecutan la mayoría de las personas sus scripts Python?


Una vez que escribe un programa que desea utilizar como módulo importado y como herramienta lanzada desde la línea de comandos. Lo más probable es que sepa lo que generalmente se hace en este caso:


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

Cuando alimenta el guión al intérprete, la variable global mágica __name__ obtiene el valor __main__ . Por lo tanto, aprendemos que esto no es una importación, sino un lanzamiento. Por ejemplo:


 python myapp.py 

Y esto funciona muy bien para un solo archivo.


El problema


Pero si eres como yo, no querrás que toda tu aplicación se agrupe en un solo archivo. Dividir la lógica en diferentes archivos simplifica la edición y el soporte. Por ejemplo:


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

Pero el usuario que clonó el proyecto desde el repositorio no entenderá: ¿cuál de estos archivos es el principal? ¿Es run.py realmente? O tal vez client.py ? ¿Dónde buscar la cadena familiar si __name__ == '__main__' ? Aquí es donde __main__.py puede probarse a sí mismo.


__main__.py


El archivo __main__.py se llama cuando el proyecto comienza con el indicador de módulo - -m . Y esto es muy conveniente si el código está diseñado para usarse como módulo y para iniciarse desde la consola. Piense en este archivo como un lugar para colocar todo lo que normalmente pone dentro si __name__ == ' __main__' . Cambiemos el proyecto del ejemplo anterior en consecuencia:


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

Y voila! Ahora puede simplemente comenzar el proyecto como un módulo regular.


 python -m myapp 

__main__.py se ejecutará automáticamente. ¡Este es el lugar perfecto para alojar la interfaz de línea de comandos y manejar argumentos de entrada!

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


All Articles