Когда мне следует помещать инструкцию import в __init__.py? pipenv влияет на sys.path? - PullRequest
0 голосов
/ 05 марта 2020

Я знаю, что об этом спрашивали несколько раз, но до сих пор неясно, когда мне следует добавить оператор импорта в __init__.py. Вот моя python структура

root/
├── subpkg/
│   ├── __init__.py
│   ├── run.py
│   └── subpkg2/
│       ├── __init__.py
│       ├── a.py
│       └── b.py
├── subpkg3/
│   ├── __init__.py
│   └── unittest.py
└── tst.py

Вот как файлы связаны друг с другом.

root/subpkg/run.py имеет класс TmpClass, и этот класс вызывает и root/subpkg/subpkg2/a.py, и root/subpkg/subpkg2/b.py.

Оба root/subpkg3/unittest.py и root/tst.py звонят TmpClass по from subpkg.run import TmpClass. Вот мой первый вопрос: я правильно понял, что оператор импорта должен работать на основе выполняемого сценария, верно? Даже папка, которую я выполняю, из root, верно? Я думаю, что root/tst.py в порядке, но я не понимаю, кого root/subpkg3/unittest.py импортирует таким образом. Разница лишь в том, что root/subpkg3/unittest.py запускается в режиме юнит-теста. Если влияет на sys.path?

Второй вопрос заключается в том, что root/subpkg/__init__.py пусто и root/subpkg/subpkg2/__init__.py должен импортировать как a.py, так и b.py на from subpkg.subpkg2 import a, from subpkg.subpkg2 import b. Без этих двух операторов импорта выдает ошибку. Когда я должен поставить оператор импорта в __init__.py?

...