Use __main__.py

Por que o __init__.py é necessário, provavelmente qualquer pythonist sabe, mas e o __main__.py ? Eu já vi alguns projetos trabalhando ou no Github que não usam esse arquivo mágico, embora eles possam facilitar sua vida. Na minha opinião, __main__.py é a melhor maneira de interagir com módulos Python que consistem em vários arquivos.


Mas vamos acertar primeiro: como a maioria das pessoas executa seus scripts Python?


Depois de escrever um programa que você deseja usar como um módulo importado e como uma ferramenta iniciada na linha de comando. Você provavelmente sabe o que geralmente é feito neste caso:


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

Quando você alimenta o script para o intérprete, a variável global mágica __name__ obtém o valor __main__ . Assim, aprendemos que isso não é uma importação, mas um lançamento. Por exemplo:


 python myapp.py 

E isso funciona muito bem para um único arquivo.


O problema


Mas se você é como eu, não deseja que seu aplicativo inteiro seja compactado em um único arquivo. A divisão da lógica em arquivos diferentes simplifica a edição e o suporte. Por exemplo:


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

Mas o usuário que clonou o projeto no repositório não entenderá - qual desses arquivos é o principal? O run.py é realmente? Ou talvez client.py ? Onde procurar a sequência familiar se __name__ == '__main__' ? É aqui que __main__.py é capaz de provar a si próprio.


__main__.py


O arquivo __main__.py é chamado quando o projeto inicia com o sinalizador de módulo - -m . E isso é muito conveniente se o código se destina ao uso como módulo e ao lançamento a partir do console. Pense nesse arquivo como um local para colocar tudo o que você normalmente coloca se __name__ == ' __main__' . Vamos mudar o projeto do exemplo acima de acordo:


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

E pronto! Agora você pode simplesmente iniciar o projeto como um módulo regular.


 python -m myapp 

__main__.py será executado automaticamente. Este é o lugar perfeito para hospedar a interface da linha de comandos e lidar com argumentos de entrada!

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


All Articles