Python 针对不同环境的 Hydra 配置

Python Hydra configuration for different environments

背景

我目前有一个脚本可以进行一些 API 数据收集。该脚本部署到两个环境,testuser。每个环境都有不同的设置,我已经创建了相应的配置文件。我目前正在迁移我的项目以使用 hydra-core 包。

Objective

如果可能的话,我想这样配置 Hydra。从 testuser 加载所有配置文件。默认应该是 test 环境,除非通过 CLI 指定加载 user 环境。

当前配置结构

Project Root
|
├── config
│   ├── config.yaml
│   ├── test
│   │   ├── config1.yaml
│   │   ├── config2.yaml
│   │   ├── config3.yaml
│   │   └── config4.yaml
│   └── user
│       ├── config1.yaml
│       ├── config2.yaml
│       ├── config3.yaml
│       └── config4.yaml

当前默认配置 - config.yaml

defaults:
  - test: [config1.yaml, config2.yaml, config3.yaml, config4.yaml]

如何通过 CLI 覆盖上述默认值?

你可以引入一个配置组,例如env 将包含您要用于每个环境的默认列表的配置。

├── config
│   ├── config.yaml
│   ├── env
│   │   ├── user.yaml
│   │   └── test.yaml
│   ├── test
│   │   └── user.yaml
│   └── user
│       └── config1.yaml

env/user.yaml:

defaults:
 - /user/config1
 - /user/config2

env/test.yaml:

defaults:
 - /test/config1
 - /test/config2

小学config.yaml:

defaults:
 - env: test # Overridable

有了上面的内容,您应该可以像这样覆盖环境:

$ python foo.py env=user

这类似于 configure experiment 模式。 这依赖于递归默认列表,这是 Hydra 1.1 中的新功能。您可以了解更多关于它们的信息 here