首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从cli重写默认列表中指定的包。

从cli重写默认列表中指定的包。
EN

Stack Overflow用户
提问于 2021-08-30 12:36:46
回答 1查看 255关注 0票数 0

我试图在分层配置结构中覆盖默认列表中的包。作为一个简化的例子:

我有conf/base.yaml

代码语言:javascript
复制
defaults:
  - _self_
  - env@_here_: env1
a: 1
b: 2

conf/env/env1.yaml

代码语言:javascript
复制
c: 5
d: 6

conf/env/env2.yaml

代码语言:javascript
复制
c: 7
d: 8

运行my_app.py

代码语言:javascript
复制
import hydra
import omegaconf

@hydra.main(config_path="conf", config_name="base")
def my_app(cfg: omegaconf.DictConf) -> None:
    print(omegaconf.OmegaConf.to_yaml(cfg))

my_app()

我希望使用CLI或任何其他方法将env@_here_env1覆盖到env2。我已经看过九头蛇文档几次了,但却找不到该怎么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-01 17:30:30

在当前的hydra版本(Hydra 1.1.1)中,您可以使用:

代码语言:javascript
复制
python my_app.py env=env2

由于最近出现了一种改进Hydra API一致性的破变,因此很快就有必要这样做:

代码语言:javascript
复制
python my_app.py env@_global_=env2

这一重大变化可能是九头蛇1.1.2或1.2.0的一部分。

附带注意:有几种不同的方法可以实现与您在上面的示例中相同的结果。你的选择包括:

  • - env@_here_: env1中使用base.yaml,这就是上面所做的。
  • - env@_global_: env1base.yaml中的应用
  • - env: env1中使用base.yaml并向env1.yamlenv2.yaml添加_global_ 包标头

conf/env/env1.yaml

代码语言:javascript
复制
# @package _global_
c: 5
d: 6

conf/env/env2.yaml

代码语言:javascript
复制
# @package _global_
c: 7
d: 8

关键字_global_指的是由Hydra生成的输出配置中的顶级包。您可以阅读更多关于这里_here_关键字的文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68984309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档