如何实现Jupyter notebook按顺序自动依次运行?
可行的实现方案整理
下面是3种无需合并代码的落地方式,可根据自己的使用场景选:
方案1:使用nbconvert命令行批量执行(无需修改原有notebook,最轻量化)
Jupyter环境默认自带nbconvert工具,直接在终端按顺序写执行命令即可,也可以写成shell脚本(Windows下可写批处理/PowerShell脚本)复用:
# Linux/macOS 示例,前一个执行成功才会跑下一个 jupyter nbconvert --execute --to notebook --inplace 第一个文件.ipynb && \ jupyter nbconvert --execute --to notebook --inplace 第二个文件.ipynb && \ jupyter nbconvert --execute --to notebook --inplace 第三个文件.ipynb
参数说明:
--execute:触发notebook所有单元格依次执行--to notebook:输出文件保持notebook格式--inplace:直接把运行结果写入原文件,不需要保留原文件可以用这个参数;如果要保留原文件就去掉该参数,加--output 输出文件名.ipynb指定结果输出路径- 用
&&连接命令表示前一个执行成功才执行下一个,不需要这个判断的话Linux/macOS换成;,Windows换成&即可
方案2:主控notebook调用执行(对应你提到的第二种思路)
新建一个空白的主控notebook,用两种方式实现顺序调用:
方式A:%run魔法命令(无额外依赖)
直接在主控notebook的单元格里按顺序写命令即可:
%run ./第一个文件.ipynb %run ./第二个文件.ipynb %run ./第三个文件.ipynb
该方式会把目标notebook的代码放到当前内核执行,运行结果会直接显示在主控notebook里,注意如果多个notebook有重名变量,后面的会覆盖前面的。
方式B:papermill库执行(变量隔离,适合复杂场景)
papermill是专门用于批量参数化运行notebook的工具,每个文件独立运行不会出现变量互相覆盖的问题:
- 先安装依赖:
pip install papermill - 在主控notebook里写执行代码:
import papermill as pm # 按执行顺序填写你的notebook路径 run_list = [ "./第一个文件.ipynb", "./第二个文件.ipynb", "./第三个文件.ipynb" ] for nb_path in run_list: # 自定义结果输出路径,要覆盖原文件的话就直接填nb_path output_path = nb_path.replace(".ipynb", "_已执行.ipynb") pm.execute_notebook( input_path=nb_path, output_path=output_path, parameters=None # 需要给notebook传自定义参数可以在这里配置 )
方案3:工作流工具调度(适合需要定期重复执行的场景)
如果这套notebook需要定期重复跑,可以用crontab(Linux/macOS)、Windows任务计划程序,或者Airflow、Prefect这类工作流工具,把前面的nbconvert命令或papermill脚本配置成顺序执行的任务,不需要每次手动触发。
注意事项
- 执行前关闭所有打开状态的待运行notebook,避免内核占用冲突
- 如果不同notebook用的虚拟环境不一样,执行命令时加
--kernel 内核名称参数指定对应内核
内容的提问来源于stack exchange,提问作者Sadaf Shafi
相关产品推荐
相关产品推荐

