(最初是在 rlearnpython但我想我也应该在这里问一下)。)
因为这个问题是在处理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
但是为什么会发生这种情况,在这种情况下我有什么办法可以解决这个问题吗?
所以,我创建了 启动.py的所有地方,并把这个放到project_module中。启动.py
考虑将project_moduleapps添加到PYTHONPATH或 sys.path
如果你真的决心去除 app
的进口。在这个用例中,这也是一个黑客,但更容易预测。