你是否曾经创建过 Jupyter notebook
并希望可以使用一组不同的参数生成notebook
?这样做的话你可能至少执行了以下操作之一:
•编辑单元格中的变量并重新运行notebook
,根据需要保存副本。•保存了notebook
的副本,并且可能修改了代码以直接在 .ipynb
文件中编辑值并重新运行notebooks
•构建了一些自定义代码以使用从数据库或配置文件加载的数据设置变量,然后重新运行notebook
这个问题有一个很好的解决方案,可以将交互式笔记本参数化并与自动化作业很好地共存,这就是所谓的papermill
。
动机
许多notebook
用户使用在其notebook
顶部附近指定一个单元格作为全局变量的标准做法。然后修改单元格中的值并运行整个notebook
以获得不同的结果。为了保持输出,作者将手动下载另一种格式的notebook
或将其另存为不同的notebook
文件。但是仅使用notebook
服务器和这些手动方法很快就会变得混乱且难以跟踪,更不用说容易出错了。你编辑的是哪个notebook
? Papermill
有助于解决这个问题。在这篇文章中,我将介绍 papermill
和基本用法,通过一个参数化的例子,最后谈谈使用 cron
完全调度和自动化 notebook
执行的方法。
对于papermill
,notebook
中的一个特殊单元格被指定为参数。当 papermill
通过命令行界面 (CLI) 或使用 Python API 执行参数化notebook
时,参数会传入并在后续单元中执行。这允许notebook
以不同的参数快速运行多次。然后可以将生成的执行后的notebook
保存在各种位置,包括本地或云存储。
安装
要安装 papermill
,请使用 pip
。我建议使用 virtualenv
或 conda
的虚拟环境。我经常推荐使用 pyenv
来安装最新的 Python 版本并创建一个 virtualenv
虚拟环境。
pip install papermill
如果您想使用各种输入和输出选项,如 Amazon 的 s3 或 Microsoft 的 azure,您可以安装所有依赖项。我不会在这里详细介绍,但文档涵盖了这些选项,你甚至可以扩展 papermill
为notebooks
的输入/输出 (I/O) 添加其他处理程序。
pip install papermill[all]
基本使用
大多数用户想要用 papermill
做的第一件事就是参数化notebook
。一旦您运行了 Jupyter
并打开了一个notebook
,您需要做的就是将参数标签添加到包含参数的单元格中。