在类中使用importlib出现ModuleNotFoundError的技术求助
问题解决:ModuleNotFoundError导入类错误
错误原因
你错误地将CheckOne类当作checks模块下的子模块来导入(用checks.CheckOne的格式),但实际上CheckOne是checks.py文件内定义的类,并非独立的模块文件,所以Python找不到对应的子模块,同时提示checks不是包(因为它是单个.py文件,不是目录)。
解决方案
修改database.py中的apply_checks方法,先导入checks模块,再从模块中获取目标类,而不是直接尝试导入类作为子模块:
class Database(): def __init__(self): # The checks we want to perform self.check_names = ['CheckOne'] def apply_checks(self): import importlib # 先导入checks模块 checks_module = importlib.import_module('checks') # 从模块中获取对应的类对象 check_classes = [getattr(checks_module, name) for name in self.check_names] # 实例化类并执行方法 for cls in check_classes: cls().apply_()
额外说明
- 无需在
root目录添加__init__.py:因为你直接在root目录运行main.py,Python会自动将当前目录加入sys.path,可以直接导入同目录下的checks.py模块。 - 之前尝试的
import checks或from . import checks写法本身没问题,但核心错误是你用importlib.import_module导入类的方式错误,而非模块导入路径问题。
运行修改后的main.py,即可正常打印Performing the first check.。
内容的提问来源于stack exchange,提问作者Graham B
相关产品推荐
相关产品推荐

