移除反向导入代码后仍出现Cannot import name导入错误的原因
问题原因及解决办法
核心原因:Python模块缓存未清空
当你触发循环导入时,Python解释器会把处于部分初始化状态的模块存入缓存。即使你后来删除了反向导入代码,Python依然会优先加载缓存里的旧模块,而不是重新读取修改后的文件,所以错误会持续存在。
具体解决步骤
- 停止当前运行的Django服务(或Python进程)
- 清空Python的模块缓存:
- 删除项目根目录及所有子目录下的
__pycache__文件夹
- 删除项目根目录及所有子目录下的
- 重新启动服务
额外注意:避免循环导入的正确姿势
以后如果需要在两个模型间建立关联,不要直接导入模型类,改用字符串引用的方式,比如在ForeignKey中这样写:
# 示例:在projects/models.py中关联companies模型 fk_company = models.ForeignKey('companies.companies', on_delete=models.CASCADE)
这种方式无需导入模块,能彻底避免循环导入问题,也是Django官方推荐的跨应用模型关联方案。
内容的提问来源于stack exchange,提问作者Game Analysis
相关产品推荐
相关产品推荐

