如何使用 Hydra-fb 将配置文件收集到列表中?

dal*_*nsi 3 python fb-hydra

假设我的代码中有一个抽象类,db并且类, , ...继承自。\n我的项目使用Hydra并具有以下结构:db1db1db1db

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_app.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 conf.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db1.yaml\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db2.yaml\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db3.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

我需要一个列表,db所以我想得到一个最终的配置文件,如下所示:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_app.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 conf.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db1.yaml\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db2.yaml\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db3.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

所以这是, , .\n在文件中db的参数列表,我想像这样:db1db2db3conf.yaml

\n
db:\n  -\n    param1_of_db1: key_1_1\n    param2_of_db1: key_1_2\n  -\n    param1_of_db2: key_2_1\n    param2_of_db2: key_2_2\n  -\n    param1_of_db3: key_3_1\n    param2_of_db3: key_3_2\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法做类似的事情?

\n

Omr*_*dan 5

Hydra 不支持您所要求的内容。

  1. 不支持列表合成,列表在合成过程中要么全有,要么全无。
  2. 配置组是互斥的,有一个功能请求可以放宽这一点。

不过,您可以接近它(无法从命令行覆盖该结构,类似于:config.yaml:

defaults:
  - db/db1
  - db/db2
  - db/db3
Run Code Online (Sandbox Code Playgroud)

此语法记录在此处。

在每个数据库配置文件中,您可以执行以下操作:

db/db1.yaml:

# @pacakge _group_._name_
host: localhost
port: 3306
Run Code Online (Sandbox Code Playgroud)

包覆盖记录在此处。

结果配置如下:

db:       # from the config group of the corresponding config (path)
  db1:    # from the name of the corresponding config
    host: localhost
    port: 3306
  db2:
    ...
Run Code Online (Sandbox Code Playgroud)