假设我们有以下设置(从Hydra docs复制并缩短):

配置文件:config.yaml

db:
  driver: mysql
  user: omry
  pass: secret

Python文件:my_app.py

import hydra
@hydra.main(config_path="config.yaml")
def my_app(cfg):
    print(cfg.pretty())
if __name__ == "__main__":
    my_app()

当我们可以在function my_app上使用decorator时,这很有效.现在,我想(出于小脚本和测试目的,但这并不重要)在任何函数之外获得这个cfg对象,只需在一个普通的python脚本中.根据我对装饰师工作方式的了解,应该可以打电话给

import hydra
cfg = hydra.main(config_path="config.yaml")(lambda x: x)()
print(cfg.pretty())

但是cfg只是None,不是理想的配置对象.因此,装饰程序似乎不会传递返回的值.有没有其他办法达到cfg美元?

推荐答案

使用Compose 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日志(log)系统等副作用.

Python-3.x相关问答推荐

如何翻转以列形式给出的日期间隔并提取多个重叠时段内每小时的音量?

无法使用诗词安装PyYaml

按小时和日期对Pandas 数据帧进行分组

十进制浮点数到整型的转换错误

匹配语句NaN

Pandas 转换为日期时间

三重奏:为什么频道被记录为使用async with,而不是with?

在一行中读写一个csv文件

来自嵌套字典的完整地址

以不规则频率识别数据框日期时间列上缺失的日期,并用关联值填充它们

如何通过从特定列创建分组多标题来reshape 数据框?

如果值超出上下限(异常值处理),则将值的数据框替换为 np.nan

Pandas 按值和索引对 DF 进行排序

如何确定一个类的元类?

Tkinter AttributeError:对象没有属性'tk'

django - 值更改后自动更新日期

将行附加到 DataFrame 的最快和最有效的方法是什么?

为什么排序列表比未排序列表大

如何判断列表中的所有项目是否都是字符串

如何删除目录? os.removedirs 和 os.rmdir 是否只用于删除空目录?