Я пытаюсь понять систему модулей Python и натолкнулся на поведение, которое я совершенно не понимаю. У меня есть такая структура папок:
.
├── foo
│ ├── __init__.py
│ └── bar.py
├── playground
│ ├── __init__.py
│ ├── __main__.py
│ ├── playground.py
│ └── toolkit
│ ├── __init__.py
│ ├── __main__.py
│ └── toolkit.py
└── setup.py
3 directories, 9 files
Внутри foo / bar.py это:
import sys
def print_sys():
print(sys.path)
playground/playground.py
и playground/__main__.py
содержат одинаковый код:
from foo import bar
bar.print_sys()
from playground.toolkit.toolkit import say_something
say_something()
playground/toolkit/toolkit.py
и playground/toolkit/__main__.py
также содержат одинаковый код:
from foo import bar
bar.print_sys()
def say_something():
print("something")
if __name__ == "__main__":
say_something()
Когда я выполню python -B playground/playground.py
, я получу ModuleNotFoundError: No module named 'playground.toolkit'; 'playground' is not a package
. Это мои переменные sys.path (заменил исходную папку на $ SRC):
['$SRC/Playground/playground', ..., '$SRC']
Когда я выполняю python -B -m playground
, это работает, выполнение этого также работает: python -B playground/toolkit/toolkit.py
и python -B -m playground.toolkit
Кто-нибудь может указать на мою ошибку здесь?