项目中的模块名称相同,都放在不同的应用程序中。
特别是有两个应用程序冲突并导致ImportError。项目结构大致如下。
project
|_ project
|_ settings.py
|_ ...
|_ apps
|_ A
|_ handlers
|_ B.py
|_ C.py
|_ B
|_ models.py
设置文件将apps
目录添加到系统路径。
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
此配置假设我导入B.models
时会使用apps/B/models.py
。虽然C.py
文件中的以下行引入导入错误,因为它导入了没有A/handlers/B.py
模块的models
。
A/handlers/C.py:
from B.models import BModel
sys.path
变量有正确的项目,即列表中的第一个是/path/to/project/apps
,sys.modules['B.models']
被引用到正确的文件。
顺便说一句,当我使用Django的import_by_path
函数时,一切正常。
如何在不重命名模块的情况下解决问题的任何想法?
提前致谢!
更新
在GitHub上发布sample sources。