Python 如何使用Hydra fb在列表中收集配置文件?
假设我的代码中有一个抽象类Python 如何使用Hydra fb在列表中收集配置文件?,python,fb-hydra,Python,Fb Hydra,假设我的代码中有一个抽象类db,类db1,db1db1。 我的项目使用并具有以下结构: ├── my_app.py ├── conf.yaml └── db ├── db1.yaml ├── db2.yaml └── db3.yaml 我需要一个db列表,因此我希望得到如下最终配置文件: db: - _db1的param1_:key_1_1 _db1的param2_:key_1_2 - db2的参数1:键2 db2的参数2:键2 - _db3的param1_:key_3
db
,类db1
,db1
<从db
继承的code>db1。
我的项目使用并具有以下结构:
├── my_app.py
├── conf.yaml
└── db
├── db1.yaml
├── db2.yaml
└── db3.yaml
我需要一个db
列表,因此我希望得到如下最终配置文件:
db:
-
_db1的param1_:key_1_1
_db1的param2_:key_1_2
-
db2的参数1:键2
db2的参数2:键2
-
_db3的param1_:key_3_1
_db3的param2_:key_3_2
因此,db
是db1
,db2
,db3
的参数列表。
在conf.yaml
文件中,我想象如下:
defaults:
- dbs/db1
- dbs/db2
- dbs/db3
db: ${oc.dict.values:dbs}
默认值:
-db:[db1,db2,db3]
有没有办法做到这一点?Hydra不支持您的要求
默认值:
-db/db1
-db/db2
-db/db3
此语法已记录在案
在每个db配置文件中,您可以执行以下操作:
defaults:
- dbs/db1
- dbs/db2
- dbs/db3
db: ${oc.dict.values:dbs}
db/db1.yaml:
#@pacakge\u组\u名称_
主机:本地主机
港口:3306
包覆盖被记录下来
生成的配置如下所示:
db:#来自相应配置(路径)的配置组
db1:#来自相应配置的名称
主机:本地主机
港口:3306
db2:
...
Hydra不支持您的要求
默认值:
-db/db1
-db/db2
-db/db3
此语法已记录在案
在每个db配置文件中,您可以执行以下操作:
defaults:
- dbs/db1
- dbs/db2
- dbs/db3
db: ${oc.dict.values:dbs}
db/db1.yaml:
#@pacakge\u组\u名称_
主机:本地主机
港口:3306
包覆盖被记录下来
生成的配置如下所示:
db:#来自相应配置(路径)的配置组
db1:#来自相应配置的名称
主机:本地主机
港口:3306
db2:
...
您可以使用最新的hydra/omegaconf进行列表合并
诀窍在于字典是组合的,因此您可以在字典中组合配置,然后使用新的oc.dict.values
插值来获得最终列表
因此,在您的情况下,它将类似于:
defaults:
- dbs/db1
- dbs/db2
- dbs/db3
db: ${oc.dict.values:dbs}
请注意,我已将“db”包重命名为“dbs”。因此最终解析的配置如下所示:
dbs:
db1:
host: localhost
port: 3306
db2:
host: localhost
port: 3307
db3:
host: localhost
port: 3308
db:
- host: localhost
port: 3306
- host: localhost
port: 3307
- host: localhost
port: 3308
“dbs”包的键没有用于任何用途,但我发现它实际上使配置更加清晰。你可以非常接近于列表与最新的hydra/omegaconf的合并 诀窍在于字典是组合的,因此您可以在字典中组合配置,然后使用新的
oc.dict.values
插值来获得最终列表
因此,在您的情况下,它将类似于:
defaults:
- dbs/db1
- dbs/db2
- dbs/db3
db: ${oc.dict.values:dbs}
请注意,我已将“db”包重命名为“dbs”。因此最终解析的配置如下所示:
dbs:
db1:
host: localhost
port: 3306
db2:
host: localhost
port: 3307
db3:
host: localhost
port: 3308
db:
- host: localhost
port: 3306
- host: localhost
port: 3307
- host: localhost
port: 3308
“dbs”的键软件包不用于任何用途,但我发现它实际上使配置更清晰。谢谢Omry,这真的很有用!顺便问一下,你打算在Hydra的下一个版本中包含列表合成吗?没有计划,在99%的情况下,最好的做法是在合并时用第二个列表替换列表。谢谢Omry,这真的很有用!btw您是否计划在Hydra的下一版本中包含列表合成?没有计划,在99%的情况下,最好的做法是在合并时用第二个列表替换列表。