2

シンプルな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 docs で、デコレータなしで構成を初期化できる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アプリによって認識されないため、コマンドラインから構成をオーバーライドできないようです。

それを解決するための推奨事項はありますか?

4

1 に答える 1