【问题标题】:Is it possible to specify paths in a configuration file that are relative to the configuration file location?是否可以在配置文件中指定相对于配置文件位置的路径?
【发布时间】:2021-04-12 12:42:34
【问题描述】:

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

├── 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 确定配置文件的位置?我真的想避免在我的配置中放置硬编码的绝对路径。

【问题讨论】:

    标签: hydra-core fb-hydra omegaconf


    【解决方案1】:

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

    你可以这样做

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

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

    【讨论】:

    • 对,我的问题在这方面可能是错误的。但是,无论配置和资源是否是实际文件,我都需要为配置中指定的任何相对路径(或从中提取文件的包)确定正确的基础。有多个插件,指定路径的基础是什么并不明显。硬编码绝对路径不是选项。我设法使用自定义 OmegaConf 解析器 ("${plugin_name:")} 解决了我的问题,但我希望有一个内置的解决方案。
    • SO 不是功能请求的地方。这是我第一次听到有人要求这样做,因此您可以确定不会有内置解决方案。随意提出适当的功能请求(从您要解决的问题开始)。
    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 2023-03-04
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    相关资源
    最近更新 更多