Я использую Python 3.5.1. Я прочитал документ и раздел пакета здесь: https://docs.python.org/3/tutorial/modules.html#packages
Теперь у меня есть следующая структура:
/home/wujek/Playground/a/b/module.py
module.py
:
class Foo:
def __init__(self):
print('initializing Foo')
Теперь, находясь в /home/wujek/Playground
:
~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Аналогично, теперь в домашней супер-папке Playground
:
~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Собственно, я могу делать всевозможные вещи:
~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Почему это работает? Я бы хотел, чтобы были файлы __init__.py
(пустые были бы работать) как для a
, так и для b
для module.py
для импорта, если путь Python указывает на папку Playground
?
Это, похоже, изменилось с 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
С __init__.py
в обоих ~/Playground/a
и ~/Playground/a/b
он отлично работает.