(Первоначально спрашивался на r / learn python, но решил, что я тоже здесь спрошу.)
Поскольку эта проблема возникла при работе с django, я Я объясню в этом контексте.
Итак, у меня есть папка проекта django и несколько внутренних django приложений, находящихся в этой папке проекта, например:
project_module
├ apps
│ ├ app_module1
│ │ ├ models.py
│ │ └ ...
│ ├ app_module2
│ └ ...
├ settings.py
└ ...
теперь app_modules доступны как project_module.apps.app_module1
и так далее, но поскольку в именах project_module
ничего не будет конфликтовать с именами приложений, я хотел бы удалить часть .apps
, чтобы я мог просто ссылаться на них как project_module.app_module1
и так, последовательно.
Итак, я создаю __init__.py
везде и помещаю это в project_module/__init__.py
:
from .apps import app_module1
И этот вид работ, так как я могу import project_module.app_module1
и это похоже на работу.
НО, Django внутренне использует importlib.import_module
здесь и там, и в этих случаях я сталкиваюсь с ModuleNotFoundError: No module named 'project_module.app_module1'
. В этих случаях я могу снова использовать .apps
, но такая последовательность нарушается.
Немного эксперимента, я убежден, import_module
игнорирует реэкспорт из __init__.py
; Но почему это происходит, и есть ли способ, которым я могу обойти это в этом случае?