如何在Papermill中参数化Python字典?

时间:2019-05-27 09:36:21

标签: python python-3.x bash jupyter-notebook papermill

我想在一个变量中传递所有参数。为此,我在Python客户端中为Papermill传递了一个字典,使用:

params = {"aviral":"srivastava"}
pm.execute_notebook( 'path/to/input.ipynb', 'path/to/output.ipynb', parameters = params )

现在,我想从bash运行相应的命令。在document中指出:

papermill local/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1

但是没有地方提供如何传递字典的方法。

我尝试了许多排列和组合,例如:

papermill test_params.ipynb params_output.ipynb -p params {"aviral":"srivastava"}

papermill test_params.ipynb params_output.ipynb -p params '{"aviral":"srivastava"}'

我还阅读了以dict格式传递'{"aviral":"srivastava"}'的信息,然后json.loads完成了工作。但是我没有转换输入的自由。必须立即在脚本中使用它。

只需一个最小的脚本即可实际检查传递的变量的类型:

params = {} # I tag this with `parameter`
print(type(params))
print(params)

是的,我看到使用papermill运行时params变量被更改了,但是传递的值是一个完整的字符串。

2 个答案:

答案 0 :(得分:1)

因为在您的情况下,您不能直接修改模板笔记本来解析输入的字符串,因此调用一个Python脚本执行纸厂怎么样?这样,您就可以将字符串解析为python字典,然后将其传递给Papermill执行。您也可以以相同的方式传递笔记本名称。

答案 1 :(得分:0)

您是否尝试过使用YAML字符串或文件?

$papermill local/input.ipynb s3://bkt/output.ipynb -f parameters.yaml

从文档中:

“当使用YAML通过-y,-b或-f传递参数时,参数值可以是数组或字典

https://papermill.readthedocs.io/en/latest/usage-execute.html