Python导入时controllers目录__init__.py失效问题排查与解决
问题原因及解决方案
可能的原因
出现这种导入差异,大概率是以下某一种情况:
- controllers目录的
__init__.py存在异常:比如文件名拼写错误(写成_init__.py或__init.py)、文件有语法错误导致Python无法执行导入语句、文件权限不足无法被读取。 - 同名文件/包冲突:Python运行环境的
sys.path路径中,存在另一个名为controllers的.py文件或包,导致Python优先加载了这个外部的controllers,而非你项目内的目标目录。 - 缓存未更新:Python的字节码缓存(
__pycache__文件夹)保留了旧版本的controllers包信息,新修改的__init__.py内容未被加载。 - 导入语句拼写错误:检查
controllers/__init__.py里的导入代码,是否存在类名/模块名大小写错误、拼写错误,比如误写为from .Myclass3 import Myclass3。
不修改命名规范的解决办法
按以下步骤排查修复:
验证
__init__.py的有效性- 确认文件名是严格的
__init__.py,无大小写或拼写错误。 - 在
controllers/__init__.py开头添加测试代码:print("Loading controllers __init__.py"),运行main.py时如果未输出该内容,说明文件未被执行,需检查文件是否损坏或路径配置。 - 确保导入语句的语法、大小写完全匹配模块和类名:
from .MyClass3 import MyClass3 from .MyClass4 import MyClass4
- 确认文件名是严格的
清理Python缓存
- 删除项目中所有
__pycache__文件夹(包括controllers目录下的),重新运行main.py,让Python重新编译加载最新代码。
- 删除项目中所有
排查同名冲突
- 检查项目根目录、Python安装目录的site-packages文件夹,以及
sys.path包含的其他路径,是否存在名为controllers.py的文件或controllers目录,若有则重命名该外部冲突项。
- 检查项目根目录、Python安装目录的site-packages文件夹,以及
强制重载模块(临时调试用)
若以上方法无效,可在main.py开头强制重载controllers包,确保加载最新的__init__.py内容:import importlib import controllers importlib.reload(controllers) from controllers import MyClass3, MyClass4
内容的提问来源于stack exchange,提问作者Lex Podgorny
相关产品推荐
相关产品推荐

