You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python动态导入模块时出现Class not found错误求助

问题原因

__import__函数默认只会返回顶层模块,当你传入plugins.core.plugin时,它返回的是plugins模块,而不是你需要的plugins.core.plugin模块。你直接从plugins里找Plugin类,自然会报错,因为Plugin实际在plugins.core.plugin这个子模块里。

解决方案

有两种靠谱的解决方式:

方式一:修复__import__的用法

给__import__加上fromlist参数,让它返回最内层的目标模块:

def import_plugin(plugin_name):
    src = f'plugins.{plugin_name}.plugin'
    # fromlist传非空列表,强制__import__返回最内层的plugin模块
    module = __import__(src, fromlist=[''])
    return getattr(module, 'Plugin')

方式二:用importlib.import_module(推荐)

这是Python3.1+官方推荐的动态导入方法,语法更直观,可读性更强:

import importlib

def import_plugin(plugin_name):
    module_path = f'plugins.{plugin_name}.plugin'
    # 直接导入目标模块
    module = importlib.import_module(module_path)
    return module.Plugin
额外注意事项

确保你的plugins目录和plugins/core目录下都有__init__.py文件(可以是空文件),虽然Python3.3+支持无__init__.py的命名空间包,但显式添加能避免不少潜在问题。

内容的提问来源于stack exchange,提问作者chrispytoes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:40:43