criar __init__.py de forma simples

Requisitos

Estrutura de desenvolvimento Python configurada e operacional.

Escopo

Usaremos no escopo a estrutura do Pacote abaixo:
#tree
mymath
├── adv
│   ├── fib.py
│   ├── __init__.py
│   └── sqrt.py
├── arithmetic.py
├── arithmetic.pyc
├── __init__.py
├── __init__.pyc
└── version.txt

Procedimentos

Primeiramente vamos descobrir quais funções fazem parte do pacote. Como abaixo:
#grep -r def mymath
mymath/adv/sqrt.py:def squareroot(n):
mymath/adv/fib.py:def fibonacci(n):
mymath/arithmetic.py:def add(x, y):
mymath/arithmetic.py:def division(x, y):
mymath/arithmetic.py:def multiply(x, y):
mymath/arithmetic.py:def subtract(x, y):
mymath/__init__.py:def read(*rnames):
Agora transformemos a saída do 'grep' nos imports do __init__.py
#grep -r def mymath|sed 's|mymath/|from mymath.|g; s|/|.|g; s|.py||g; s|:def| import|g; s|(.*):||'
from mymath.adv.sqrt import squareroot
from mymath.adv.fib import fibonacci
from mymath.arithmetic import add
from mymath.arithmetic import division
from mymath.arithmetic import multiply
from mymath.arithmetic import subtract
Para simplificar a execução, podemos acrescentar uma variável com o nome do projeto, desta forma:
#PROJ=mymath;grep -r def $PROJ|sed "s|$PROJ/|from $PROJ.|g; s|/|.|g; s|.py:def| import|g; s|(.*):||"
mymath.adv.sqrt import squareroot
mymath.adv.fib import fibonacci
mymath.arithmetic import add
mymath.arithmetic import division
mymath.arithmetic import multiply
mymath.arithmetic import subtract
Criando o __init__.py
  1. #PROJ=mymath; grep -r def $PROJ|sed "s|$PROJ/|from $PROJ.|g; s|/|.|g; s|.py:def| import|g; s|(.*):||" > $PROJ/__init__.py
  2. > mymath/adv/__init__.py
O arquivo __init__.py em branco deverá ser criado no demonstrado, em todos os diretórios dentro do projeto para que o import funcione corretamente

Comentários