Além de ser um marcador, o arquivo __init__.py
pode conter código Python. Este código será executado automaticamente na primeira vez que o pacote ou qualquer um de seus módulos for importado. Isso o torna um local ideal para:
Inicialização de Pacote: Definir variáveis que são globais para o pacote, realizar configurações iniciais ou configurar loggers.
Importações Convenientes: Expor módulos ou itens de sub-módulos diretamente no namespace do pacote. Isso significa que, em vez de fazer from meu_pacote.submodulo import minha_funcao
, você pode fazer from meu_pacote import minha_funcao
se minha_funcao
for importada em meu_pacote/__init__.py
.PythonPythonPythonPython
Exemplo de Inicialização e Importação em __init__.py
:
Considere a estrutura:
meu_pacote/
├── __init__.py
├── configuracoes.py
└── utilidades/
├── __init__.py
└── helpers.py
Conteúdo de meu_pacote/configuracoes.py
:
# meu_pacote/configuracoes.py
API_KEY = "sua_chave_secreta"
DEBUG_MODE = True
Conteúdo de meu_pacote/utilidades/helpers.py
:
# meu_pacote/utilidades/helpers.py
def formatar_texto(texto):
return texto.upper()
Conteúdo de meu_pacote/__init__.py
:
# meu_pacote/__init__.py
# Exemplo de inicialização:
VERSAO = "1.0.0"
# Importações convenientes para expor itens diretamente do pacote
from . import configuracoes # Isso torna configuracoes acessível via meu_pacote.configuracoes
from .utilidades.helpers import formatar_texto # Isso torna formatar_texto acessível via meu_pacote.formatar_texto
# Controlando o que é importado com 'from meu_pacote import *' (uso de __all__)
# Se você usar 'from meu_pacote import *', apenas 'configuracoes', 'formatar_texto' e 'VERSAO' seriam importados.
__all__ = ['VERSAO', 'configuracoes', 'formatar_texto']
Com este __init__.py
, você pode importar assim em outro script:
import meu_pacote
print(f"Versão do pacote: {meu_pacote.VERSAO}")
print(f"Modo Debug: {meu_pacote.configuracoes.DEBUG_MODE}")
print(f"Texto formatado: {meu_pacote.formatar_texto('olá mundo')}") # Acessando diretamente
Observe como formatar_texto
foi importado em __init__.py
e pode ser acessado diretamente de meu_pacote
.