Estou usando o Python 3.5.1. Li o documento e a seção do pacote aqui: https://docs.python.org/3/tutorial/modules.html#packages
Agora, tenho a seguinte estrutura:
/home/wujek/Playground/a/b/module.py
module.py
:
class Foo:
def __init__(self):
print('initializing Foo')
Agora, enquanto estiver em /home/wujek/Playground
:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Da mesma forma, agora em casa, superdobrador de Playground
:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Na verdade, eu posso fazer todo tipo de coisa:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Por que isso funciona? Eu pensei que precisava haver __init__.py
arquivos (os vazios funcionariam) em ambos a
e b
para module.py
serem importáveis quando o caminho do Python apontar para a Playground
pasta?
Isso parece ter mudado do Python 2.7:
~ $ PYTHONPATH=Playground python
>>> import a
ImportError: No module named a
>>> import a.b
ImportError: No module named a.b
>>> import a.b.module
ImportError: No module named a.b.module
Com __init__.py
em ambos ~/Playground/a
e ~/Playground/a/b
funciona bem.