importlib.import_module 忽略 __init__.py 中的重导出。

问题描述 投票:0回答:1

(最初是在 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但是为什么会发生这种情况,在这种情况下我有什么办法可以解决这个问题吗?

python django python-module python-importlib
1个回答
0
投票

所以,我创建了 启动.py的所有地方,并把这个放到project_module中。启动.py

考虑将project_moduleapps添加到PYTHONPATH或 sys.path 如果你真的决心去除 app 的进口。在这个用例中,这也是一个黑客,但更容易预测。

© www.soinside.com 2019 - 2024. All rights reserved.