fla*_*awr 13 python-3.x hydra-python fb-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?
Omr*_*dan 17
使用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 日志记录系统。
for*_*tso 14
上述解决方案都不适合我。他们给出了错误:
“builtin_function_or_method”对象没有属性“ code ”
和
GlobalHydra 已经初始化,如果想重新初始化,请调用 GlobalHydra.instance().clear()
我进一步研究 Hydra 并意识到我可以使用 OmegaConf 直接加载文件。你不会被覆盖,但我对此并不大惊小怪。
import omegaconf
cfg = omegaconf.OmegaConf.load(path)
| 归档时间: | 
 | 
| 查看次数: | 5117 次 | 
| 最近记录: |