Kedro:如何从命令行传递 "list" 参数?

Kedro: How to pass "list" parameters from command line?

我想通过命令行控制kedro参数。

根据docs,kedro可以指定运行参数如下:

kedro run --params key:value
> {'key': 'value'}

有效。同样,我尝试指定 list 参数,如下所示:

kedro run --params keys:['value1']
> {'keys': '[value1]'}

它不起作用,因为 kedro interplets 不是列表而是 str。可能 可能相关。

希望提及几件事以使 kedro 评估像 yaml 这样的列表参数。

默认情况下,kedro 命令行不会对更简单的数字类型以外的参数进行类型转换。应该通过 parameters.yml 文件处理更复杂的参数。

也就是说,如果您真的想要这样做,您可以修改您的kedro_cli.py以支持它。具体来说,您需要修改文件中的 _split_params 回调函数。这里最简单的事情可能是更改读取

的行
result[key] = _try_convert_to_numeric(value)

处理将简单数字类型解析为

result[key] = json.loads(value)

让它解析更广泛的类型。也就是说,将您传入的 CLI 参数解析为 json(因此您还需要注意引号并确保传入有效的 json 语法。

如果这不起作用,您可以尝试添加自己的语法并在该函数中对其进行解析。但是,我的建议是避免依赖来自 CLI 的脆弱字符串参数评估,而是使用 parameters.yml

除了 Zain 的 , one can specify extra params using the CLI config。其中 config.yml 看起来像:

run:
  params:
    keys: [value1]

但再次强调:我们强烈建议不要在额外的 CLI 参数中添加复杂的结构。建议的方法是为此使用 configuration environments