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

多层目录加载Cog模块报错,如何实现子目录模块加载?

问题解决:加载深层目录中的Python模块

你的问题核心是Python模块路径和文件系统路径搞混了,client.load_extension需要的是Python可识别的模块路径,不是直接的文件夹路径,所以才会报ModuleNotFoundError。

为什么原来的代码能运行?

你原来的代码里,commands文件夹应该已经是一个Python包(大概率有__init__.py文件),而且main目录在Python的模块搜索路径里,所以commands.test这种模块路径能被识别。

怎么加载深层目录的模块?

  1. 把目标子文件夹变成Python包:在main/commands/testfolder(或者你说的commandFolder)里加一个空的__init__.py文件,Python才会把这个文件夹当作模块的一部分。
  2. 修正模块路径:load_extension的参数要从顶层模块开始写,比如加载testfolder里的command.py,应该写成commands.testfolder.command,而不是testfolder.command。
  3. 递归遍历所有子目录:如果要批量加载所有深层的py文件,用os.walk代替os.listdir,递归遍历每个文件夹:
import os
async def load1():
    # 遍历main/commands下的所有文件夹和文件
    for root, dirs, files in os.walk("main/commands"):
        for filename in files:
            if filename.endswith(".py") and filename != "__init__.py":
                # 把文件系统路径转换成模块路径
                # 比如main/commands/testfolder/command.py -> commands.testfolder.command
                relative_path = os.path.relpath(root, "main")
                module_path = relative_path.replace(os.sep, ".") + f".{filename[:-3]}"
                await client.load_extension(module_path)

关于包含非py文件的文件夹

完全可行!只要文件夹里有__init__.py,不管里面有json、txt还是其他文件,Python都能把它当作包,你只需要加载其中的py模块就行,其他文件不会影响模块加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:40:31