我在项目中有同名的模块,都放在不同的应用程序中。
特别是有两个应用程序发生冲突并导致 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 上发布示例源。