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

加载Discord Bot的Cogs时遇ImportError:相对导入超出顶级包

解决Discord Bot加载Cogs时的ImportError问题

问题根源

  1. 错误的相对导入逻辑:from ..main import client试图跳出当前包层级,但你的discord-bot目录未被Python识别为可导入包(缺少__init__.py),且完全不需要导入main里的client。
  2. Cog代码不符合discord.py规范:直接使用@client.command()绑定命令、用client.add_cog()添加Cog,违背了Cog的设计逻辑——Cog应通过传入的bot实例完成操作。

具体修复步骤

1. 修正base.py代码

移除对main.py中client的导入,改用discord.py Cog的标准写法:

from discord.ext import commands

class BASE(commands.Cog):
    def __init__(self, bot):
        self.bot = bot  # 接收传入的bot实例

    # 使用@commands.command()装饰器绑定命令到当前Cog的bot实例
    @commands.command()
    async def training(self, ctx):
        print('a')

# 通过setup函数传入的bot参数添加Cog
def setup(bot):
    bot.add_cog(BASE(bot))

2. 确保运行工作目录正确

运行main.py时,需保证工作目录为discord-bot(即main.py所在目录)。如果用PyCharm:

  • 右键点击main.py → 选择Modify Run Configuration
  • 在Working directory中选择discord-bot目录

3. 验证main.py加载逻辑(无需修改,确认即可)

你的加载函数写法正确,仅建议修正拼写错误:

async def load():
    for filename in os.listdir('Cogs'):
        if filename.endswith('.py'):
            await client.load_extension(f'Cogs.{filename[:-3]}')
        else:
            print("Couldn't load the Cogs.")  # 原拼写log改为load,语义更准确

为什么之前的尝试无效?

  • 直接写from main import client失败:Python运行时的模块搜索路径不包含discord-bot目录,无法定位main模块。
  • 相对导入from ..main import client失败:Cogs是discord-bot的子目录,但discord-bot未被识别为Python包(缺少__init__.py),无法向上跳一级导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:54:53