【问题标题】:Kedro: How to pass "list" parameters from command line?Kedro:如何从命令行传递“列表”参数?
【发布时间】:2020-06-20 23:19:17
【问题描述】:

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

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

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

它有效。同样,我尝试像这样指定 list 参数:

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

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

希望提到一些事情,让 kedro 评估像 yaml 这样的列表参数。

【问题讨论】:

    标签: python kedro


    【解决方案1】:

    除了 Zain 的answer,还可以使用CLI config 指定额外的参数。 config.yml 看起来像这样:

    run:
      params:
        keys: [value1]
    

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

    【讨论】:

    • 感谢您的回复,德米特里。该功能非常酷。它可以通过 config.yml 包装运行时参数。在这种情况下,我会采用你的方式。我会记住你的再次强调:)
    • @Dmitry Deryabin 感谢您的回答。您能否更新 CLI 配置链接?不幸的是它坏了。
    • @evolved 感谢您发现这一点!我们重新整理了一些文档,这破坏了链接。新的是kedro.readthedocs.io/en/stable/04_kedro_project_setup/…(我也会更新我的答案)。
    【解决方案2】:

    默认情况下,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

    【讨论】:

    • 感谢您的回复。赞恩。正如您所说,将复杂的参数作为 cli 传递是不兼容的。特别是在使用逗号与默认语法冲突的情况下。我会接受你的建议。我永远是 kedro 的粉丝。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2016-03-25
    • 2011-09-10
    • 2012-07-26
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多