假设我们有以下设置(从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相关问答推荐

使用Python请求从特定URL下载图像时出错

Python3和请求-超文本标记语言:试图抓取一个网站-没有取回真正的超文本标记语言代码

如何将参数/值从测试方法传递给pytest的fixture函数?

使用 Fetch 提交表单到 Django 视图

Python (pandas) - 判断一个 df 中的值是否在另一个(不相等)df 中的任何对之间

生成具有偶数个 0 和 1 的给定长度的所有二进制数

Pandas matplotlib:条形图占总数的百分比

pip 找不到最新的软件包版本

使用 python-binance 时,heroku [regex._regex_core.error: bad escape \d at position 7] 出错

Dask worker post-processing

在python中循环处理时并行写入文件

排队多个子进程

类型提示和链式赋值以及多重赋值

如何从脚本中提取 PDF 文档的标题以进行重命名?

Seaborn:注释线性回归方程

UnicodeDecodeError:utf-8编解码器无法解码位置 1 的字节 0x8b:无效的起始字节,同时读取Pandas中的 csv 文件

Python heapify() 时间复杂度

为什么中断比引发异常更快?

是否在未完成初始化的对象上调用了 del?

使用 asyncio 的多个循环