Używam Python 3.5.1. Przeczytałem tutaj dokument i pakiet: https://docs.python.org/3/tutorial/modules.html#packages
Teraz mam następującą strukturę:
/home/wujek/Playground/a/b/module.py
module.py
:
class Foo:
def __init__(self):
print('initializing Foo')
Teraz, będąc w /home/wujek/Playground
:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Podobnie, teraz w domu, superfolder Playground
:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Właściwie mogę robić różne rzeczy:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Dlaczego to działa? I choć nie musiał być __init__.py
pliki (pustych będzie działać) w obu a
i b
dla module.py
aby być importable gdy pytona punkty ścieżka do Playground
folderu?
Wygląda na to, że zmieniło się to z 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
Z __init__.py
obu ~/Playground/a
i ~/Playground/a/b
działa dobrze.