如何访问 kedro 管道中的环境名称

How to access environment name in kedro pipeline

有什么方法可以访问kedro管道环境名称吗?其实下面是我的问题。

我正在加载如下配置路径

conf_paths = ["conf/base", "conf/local"]  
conf_loader = ConfigLoader(conf_paths)
parameters = conf_loader.get("parameters*", "parameters*/**")
catalog = conf_loader.get("catalog*")

但我几乎没有像 "conf/server" "conf/test" 等环境,所以如果我有可用的环境名称,我可以将它添加到 conf_paths 中作为 "conf/<env_name>" 这样 kedro将从各自的 env 文件夹中读取文件。 但是现在如果 env 路径没有添加到 conf_paths,即使我在 运行 kedro 喜欢 kedro run --env=server 时指定了 env 名称,文件也不会被 kedro 读取 我搜索了所有文档,但找不到任何解决方案。

编辑: 详细说明这个问题。 我在节点中使用上面给出的参数和目录字典。我只有 conf/base/parameters.yml 中所有 运行 的通用键和 conf/server/parameters.yml 中的环境特定键但是当我这样做时 kedro run --env=server 我得到 keyerror表示 conf/server/parameters.yml 中的键在参数字典中不可用。如果我将 conf/server 添加到 config_paths kedro 是 运行ning 好没有 keyerror。

你不需要定义配置路径、配置加载器等,除非你试图覆盖某些东西。

如果您使用的是 kedro 0.17.x,hooks.py 将看起来像这样。

Kedro 会将您在 conf_paths 运行时指定的 base、local 和 env 传递给 ConfigLoader

class ProjectHooks:
    @hook_impl
    def register_config_loader(
        self, conf_paths: Iterable[str], env: str, extra_params: Dict[str, Any]
    ) -> ConfigLoader:
        return ConfigLoader(conf_paths)

    @hook_impl
    def register_catalog(
        self,
        catalog: Optional[Dict[str, Dict[str, Any]]],
        credentials: Dict[str, Dict[str, Any]],
        load_versions: Dict[str, str],
        save_version: str,
        journal: Journal,
    ) -> DataCatalog:
        return DataCatalog.from_config(
            catalog, credentials, load_versions, save_version, journal
        )

有问题,我可以看到您已经定义了 conf_pathsconf_loader 并且 env 路径不存在。所以kedro会忽略运行时传递的env。