是否可以在配置文件中指定相对于配置文件位置的路径?

问题描述

我有一个复杂的配置搜索路径,其中包含多个位置,其中每个位置看起来都类似于:

├── conf
│   └── foo
│       ├── foo.yaml
│       └── bar.yaml
└── files
    ├── foo.txt
    └── bar.txt

使用 foo.yaml:

# @package _group_
path: "../../files/foo.txt"

和 bar.yaml:

# @package _group_
path: "../../files/bar.txt"

现在的问题是:如何找到配置中指定的文件的正确位置?我知道 hydra 提供的 to_absolute_path() 方法,但它解释了相对于应用程序启动目录的路径。但是,我想相对于配置文件的位置来解释该路径。我无法在我的代码中手动执行此操作,因为我不知道 hydra 是如何解析配置文件的,以及它的确切用途。

是否有某种机制可以从 hydra 确定配置文件的位置?我真的不想在我的配置中放置硬编码的绝对路径

解决方法

您无法获取配置文件的路径。事实上,它可能根本不是一个文件(例如结构化配置的情况),或者它可以在一个 python 轮中(甚至在一个压缩轮中)。

你可以做类似的事情

path = os.path.join(os.path.dirname(__file__),"relative_path_from_config")

您还可以使用专为从 Python 模块加载资源文件而设计的 API。 Here 是该主题的一个很好的答案。