python-3.x - 如何在不使用 @hydra.main() 的情况下获取 Hydra 配置
问题描述
假设我们有以下设置(从Hydra 文档复制并缩短):
配置文件:config.yaml
db:
driver: mysql
user: omry
pass: secret
蟒蛇文件:my_app.py
import hydra
@hydra.main(config_path="config.yaml")
def my_app(cfg):
print(cfg.pretty())
if __name__ == "__main__":
my_app()
当我们可以在函数上使用装饰器时,这很有效my_app
。现在我想(对于小脚本和测试目的,但这并不重要)cfg
在任何函数之外获取这个对象,只是在一个普通的 python 脚本中。据我了解装饰器的工作原理,应该可以调用
import hydra
cfg = hydra.main(config_path="config.yaml")(lambda x: x)()
print(cfg.pretty())
但 thencfg
只是None
而不是所需的配置对象。所以看起来装饰器没有传递返回的值。还有其他方法可以做到cfg
吗?
解决方案
使用撰写 API:
from hydra import compose, initialize
from omegaconf import OmegaConf
initialize(config_path="conf", job_name="test_app")
cfg = compose(config_name="config", overrides=["db=mysql", "db.user=me"])
print(OmegaConf.to_yaml(cfg))
这只会构成配置,不会产生更改工作目录或配置 Python 日志系统等副作用。
推荐阅读
- vue.js - 如何在向组件传递不同数据的同时多次使用组件?
- c++ - 用于查找二叉树高度的递归代码
- c# - 从 for 循环中断的用户输入
- ruby-on-rails - 在 Rails API 中存储图像并将其传递给 React App?
- php - if语句php中的宾格数组值
- javascript - 如果 Axios.get 响应数据良好,则 React setState
- python - Plotly express 在 Python 中绘制的意外附加线
- java - JavaFX 设置图像抛出 IllegalArgumentException
- ios - 在 iOS 13 上使用弹出手势弹出时出现白色闪烁
- flutter - 在 ListView 中定位小部件