Почему импорт модуля верхнего уровня не работает - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь понять систему модулей 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

Кто-нибудь может указать на мою ошибку здесь?

...