问题描述
我有一个复杂的配置搜索路径,其中包含多个位置,其中每个位置看起来都类似于:
├── 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 是该主题的一个很好的答案。