シンプルな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アプリによって認識されないため、コマンドラインから構成をオーバーライドできないようです。
それを解決するための推奨事項はありますか?