我有一个简单的Typer应用程序:
import typer
app = typer.Typer()
@app.command()
def say_hi():
print("Hi")
@app.callback()
def main():
pass
if __name__ == "__main__":
app()
我想使用Hydra来管理应用程序的配置,但是我不确定如何在不失去从 CLI 覆盖配置的能力的情况下做到这一点。
我的第一次尝试是:
import hydra
import typer
from omegaconf import DictConfig, OmegaConf
app = typer.Typer()
@app.command()
def say_hi():
print("Hi")
@app.callback()
@hydra.main(config_path="conf", config_name="config")
def main(cfg: DictConfig) -> None:
print(OmegaConf.to_yaml(cfg))
if __name__ == "__main__":
app()
但我收到一条错误消息:
RuntimeError: Type not yet supported: <class 'omegaconf.dictconfig.DictConfig'>
如果我删除DictConfig
类型注释,我会收到一个cfg
缺失的错误。
我在Hydra文档中看到了Compose API,它允许在没有装饰器的情况下初始化配置:
@app.callback()
def main() -> None:
with initialize(config_path="conf", job_name="test_app"):
cfg = compose(config_name="config")
print(OmegaConf.to_yaml(cfg))
但在这种情况下,我似乎无法从命令行覆盖配置,因为Typer应用程序无法识别这些值。
有什么建议可以解决吗?