使用Hydra Compose API读取嵌套目录YAML报错,求解决方法
问题描述
目录结构
Main_dir: conf: project: test_project1: env: source: src.yaml
src.yaml内容
table: TEST_TABLE DB: Test_DB
所用Hydra代码
with initialize(version_base=None, config_path="../../conf"): cfg = compose(config_name="config", overrides = ["project=test_project1","+source=src"]) print(cfg)
报错信息
hydra.errors.ConfigCompositionException: Could not override 'project'. No match in the default list
解决方法
这个错误是因为Hydra的基础配置里没有定义project相关的配置项或配置组,导致无法识别project=test_project1这个覆盖指令。按以下步骤修正:
完善基础配置文件
在conf目录下创建或修改config.yaml(即代码中指定的config_name),添加配置组的默认引用:defaults: - project: test_project1 - _self_这样Hydra会把
project识别为一个配置组,允许通过覆盖指令切换不同的project配置。修正覆盖指令的写法
src.yaml位于test_project1/env/source目录下,需要用嵌套路径指定加载该配置,同时确保project的覆盖能被识别:with initialize(version_base=None, config_path="../../conf"): cfg = compose( config_name="config", overrides=[ "project=test_project1", "project.env.source=src" ] ) print(cfg)备选方案:直接加载目标配置
如果不需要依赖基础配置,也可以直接指定src.yaml的完整路径(从conf目录开始):with initialize(version_base=None, config_path="../../conf"): cfg = compose( config_name=None, overrides=["project/test_project1/env/source/src"] ) print(cfg)
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

