带有“hydra”的命令行参数

command line args with `hydra`

将配置传递给 hydra 的标准口头禅是用 @hydra.main 修饰,然后定义 main(cfg),然后在 main 块中调用 main 没有参数。但是假设我也想接受非 hydra 命令行参数,所以想同时传递参数和配置?这是否被视为道德不纯和令人气馁?这是我的意思的例子(它不起作用)(它错误地声称它缺少 cfg 参数)。

from omegaconf import DictConfig, OmegaConf
import hydra

@hydra.main(version_base=None)
def my_app(foo, cfg: DictConfig) -> None:
    print(foo)
    print(OmegaConf.to_yaml(cfg))

if __name__ == "__main__":
    my_app(5)

这是不支持的。 原则上,在组成配置之前,您没有任何东西可以为 5 参数设置不同的值。

如果你想在编写配置之前有额外的逻辑,请查看 Compose API 作为 @hydra.main() 的替代(或附加)。