Para que serve o __main__.py
arquivo, que tipo de código devo inserir e quando devo ter um?
Geralmente, um programa Python é executado nomeando um arquivo .py na linha de comando:
$ python my_program.py
Você também pode criar um diretório ou arquivo zip cheio de código e incluir a __main__.py
. Em seguida, você pode simplesmente nomear o diretório ou zipfile na linha de comando, e ele executa __main__.py
automaticamente:
$ python my_program_dir
$ python my_program.zip
# Or, if the program is accessible as a module
$ python -m my_program
Você terá que decidir por si mesmo se seu aplicativo pode se beneficiar da execução assim.
Observe que um __main__
módulo geralmente não vem de um __main__.py
arquivo. Pode, mas geralmente não. Quando você executa um script como python my_program.py
, o script será executado como o __main__
módulo em vez do my_program
módulo. Isso também acontece para os módulos executados como python -m my_module
, ou de várias outras maneiras.
Se você viu o nome __main__
em uma mensagem de erro, isso não significa necessariamente que você deve procurar um __main__.py
arquivo.
python -m program_dir
epython program_dir
um pouco diferente: o último nunca corre__init__.py
no diretório (se houver um).python3 program_dir
e funcionou__init__.py
.python3 dir
roda,__main__.py
mas não__init__.py
, enquantopython3 -m dir
roda ambos.__main__.py
qual desencadeou a importação de__init__.py
Para que serve o
__main__.py
arquivo?Ao criar um módulo Python, é comum fazer com que o módulo execute alguma funcionalidade (geralmente contida em uma
main
função) quando executado como o ponto de entrada do programa. Isso geralmente é feito com o seguinte idioma comum, localizado na parte inferior da maioria dos arquivos Python:Você pode obter a mesma semântica para um pacote Python
__main__.py
. Este é um prompt do shell linux$
. Se você não tiver o Bash (ou outro shell Posix) no Windows, crie esses arquivosdemo/__<init/main>__.py
com o conteúdo entreEOF
s:(Em um shell Posix / Bash, você pode fazer o acima sem os se
<< EOF
terminarEOF
s digitando Ctrl+D , o caractere de fim de arquivo, no final de cada comando cat)E agora:
Você pode derivar isso da documentação. A documentação diz:
Fechado
Você também pode empacotar isso em um único arquivo e executá-lo na linha de comando, como este - mas observe que os pacotes compactados não podem executar subpacotes ou submódulos como ponto de entrada:
fonte
__main__.py
é usado para programas python em arquivos zip. O__main__.py
arquivo será executado quando o arquivo zip for executado. Por exemplo, se o arquivo zip fosse o seguinte:e o conteúdo de
__main__.py
eraEntão, se fôssemos correr
python test.zip world
, teríamoshello world
.Portanto, o
__main__.py
arquivo é executado quando o python é chamado em um arquivo zip.fonte
Você cria
__main__.py
noyourpackage
para torná-lo executável como:fonte
-m
funciona se apenas o programa é acessível como um módulo, então você poderia usarpython <yourpackage>
NOTA: sem-m
opçãopackage
?python -m <yourproject>
não funciona,-m
é uma opção redundante, maspython <yourpackage>
funciona bem.a
e assumir o scripta/b/c/__main__.py
...python -m b.c
será executado a partir do diretórioa
e as importações do script principal serão relativas aa
. Maspython b/c
será executado a partir do escopo de importação de dirc
e, portanto, qualquer importação como no script principal comoimport b.d
falhará.Se o seu script for um diretório ou arquivo ZIP em vez de um único arquivo python,
__main__.py
será executado quando o "script" for passado como argumento para o intérprete python.fonte