【问题标题】:Cogs - Looking in Parent Directory (Discord.py)Cogs - 在父目录中查找 (Discord.py)
【发布时间】:2025-12-17 08:20:04
【问题描述】:

我最近为我的 discord 机器人重新组织了我的代码,并且 cogs 不再位于子目录中,而是位于父目录中。我试过这样的事情:

client.load_extension("../commands/fun.eightball")

client.load_extension("/home/user/bot/commands/fun.eightball")

但没有成功。我做错了什么?

【问题讨论】:

  • discordpy.readthedocs.io/en/latest/ext/commands/… 似乎没有走上一条路。 “name (str) - 要加载的扩展名。如果访问子模块,它必须像常规 Python 导入一样用点分隔。例如,如果你想导入 foo/test.py,则使用 foo.test。”该字符串似乎采用 python . 表示法。虽然它支持多远等等 idk。 / 不起作用。

标签: python discord discord.py


【解决方案1】:

client.load_extension() 采用“folder.file”之类的路径,我建议您解决此问题的方法是将您的 cogs 文件夹放入与 bot.py 相同的文件夹级别,以便您可以通过 client.load_extension("CogFolder.funEightball") 访问它。

*请注意,“fun.eightball”在 client.load_extension() 中被视为路径作为参数。

作为一个更好的选择,我建议您使用 os 库列出您要构建 cogs 的文件夹中的每个项目,这样您就不必为每个 cog 执行命令行。

for file in os.listdir("/home/user/bot/commands"):
    if file.endswith(".py"):
        client.load_extension(f'commands.{file[:-3]}')

【讨论】:

  • Traceback (most recent call last): File "index.py", line 35, in <module> client.load_extension(f'commands.{file[:-3]}') File "/home/user/.loacl/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 649, in load_extension spec = importlib.util.find_spec(name) File"/usr/python3.7/importlib/util.py", line 94, in find_spec parent = __import__(parent_name, fromlist=["__path__"]) ModuleNotFoundError: No module named 'fun' 这是我在尝试您的代码时遇到的错误:/
  • 如果你没有在 "bot,py" 的同一级别上创建一个文件夹,它将不起作用,这意味着你的主文件必须与你的 cogs 文件夹在同一路径中示例:如果你的主文件在/home/user/bot/commands,那么你的cogs文件夹应该在这个路径/home/user/bot/commands/CogsFolder,这意味着你将使用client.load_extension(f'CogsFolder.{file[:-3]}')for file in os.listdir("/home/user/bot/commands/CogsFolder"):