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

在子模块使用@hydra.main时Hydra配置加载失败问题求助

解决Hydra在子模块中使用@hydra.main的报错问题

问题原因

你遇到的Primary config module 'config' not found错误,核心原因是Hydra的config_path是相对于启动脚本(main.py)的路径,而非定义装饰器的子模块路径。你在initialise.py中写的../../config是相对于该子模块的路径,但启动脚本main.py位于src目录,这个相对路径在启动时会被解析为错误的位置,导致Hydra找不到配置目录。

另外,直接在子模块加载时调用init_configs()会跳过Hydra的命令行参数处理流程,也可能引发初始化时机的问题。

解决方案

1. 修正config_path的相对路径

将initialise.py中的config_path改为相对于启动脚本main.py的路径:../config(因为main.py在src目录,上级目录就是项目根目录,对应config文件夹)。

2. 调整初始化触发时机

不在子模块加载时自动执行初始化,而是由main.py主动触发,这样能保留Hydra的命令行参数解析、配置组合等完整功能。

修改后的代码

initialise.py

import hydra
import omegaconf

CONFIG = None

@hydra.main(version_base=None, config_path='../config', config_name='default')
def init_configs(cfg: omegaconf.DictConfig) -> None:
    global CONFIG
    CONFIG = cfg
    # 其他初始化代码

main.py

from utils import initialise

# 触发Hydra配置初始化,支持命令行参数覆盖(比如 python main.py +configuration=configuration1)
initialise.init_configs()

print(initialise.CONFIG)

额外说明

  • 如果启动main.py时的工作目录是项目根目录,也可以将config_path设为config(绝对路径也可以,但相对路径更灵活)。
  • 这种方式完全保留Hydra的所有核心功能:命令行参数覆盖、配置组合、多环境配置切换等,不会像compose API那样丢失功能。

内容的提问来源于stack exchange,提问作者Raymond C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:46:57