PEP420 macht __init__.py
Dateien optional: https://docs.python.org/3/whatsnew/3.3.html#pep-420-implicit-namespace-packages__init__.py erforderlich für pkgutil.walk_packages in python3?
Obwohl es ohne sie scheint, ist pkgutil.walk_packages
nicht wie gewünscht funktionieren: https://docs.python.org/3/library/pkgutil.html#pkgutil.walk_packages
Betrachten Sie das folgende Beispiel:
$ tree foo
foo
├── bar
│ ├── baz.py
│ └── __init__.py
├── __init__.py
└── womp.py
Und ein Testskript
# test.py
import pkgutil
import foo
for _, mod, _ in pkgutil.walk_packages(foo.__path__, foo.__name__ + '.'):
print(mod)
In beiden Python 2 und python3 ich folgende Ausgabe:
$ python2.7 test.py
foo.bar
foo.bar.baz
foo.womp
$ python3.5 test.py
foo.bar
foo.bar.baz
foo.womp
Entfernen der __init__.py
Dateien und nur mit python3, bekomme ich diese:
$ find -name '__init__.*' -delete
$ python3.5 test.py
foo.bar
Die Module definitiv importierbar sind:
$ python3.5 -c 'import foo.bar.baz'
$
Ist das ein Fehler? Bin ich gezwungen, die __init__.py
Dateien zu erstellen, um zu erreichen, was ich will?