Действительно ли файл __init__.py не нужен для пакетов python 3.7? - PullRequest
2 голосов
/ 21 января 2020

Недавно я создал приложение flask и решил добавить тестовую папку вне папки приложения (и папка приложения, и тестовая папка находятся в одном каталоге). Все реализации, для которых я буду тестировать, содержатся в пакетах и ​​модулях, созданных в папке приложения.

Наличие файла __init__.py в обеих папках работает нормально, как и ожидалось. Однако когда я удаляю файл __init__.py из тестовой папки, я начинаю испытывать moduleImportError. Python do c говорит, что файл __init__.py больше не требуется для пакетов в python 3.3+, но в моем случае здесь, похоже, это требование. Может кто-нибудь объяснить, почему это так?

1 Ответ

3 голосов
/ 21 января 2020

Быстрый ответ, Да, благодаря неявным пакетам пространств имен вам больше не нужны __init__.py файлы. Но некоторые инструменты стандартной библиотеки, включая unittest или инструменты настройки , все еще нуждаются в __init__.py файлах.

В большинстве случаев я рекомендую следующее древовидность проекта:

setup.py
src/
    mypkg/
        __init__.py
        app.py
        view.py
tests/
    __init__.py
    foo/
        __init__.py
        test_view.py
    bar/
        __init__.py
        test_view.py

Папка Top pakage src и root не нуждается в __init__.py файлах. Для всех остальных подмодулей необходим файл __init__.py.

Следуя этому правилу, большинство инструментов успешно обнаруживают модули, включая unittest, pytest и setuptools.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...