如何从Jupyter Notebook A运行Notebook B并保存其输出结果?
实现方案:从Notebook A运行Notebook B并传递变量、自动保存
方案一:参数化运行工具papermill(推荐,完全符合需求)
无需修改Notebook B的业务逻辑,也不需要额外加保存函数,自带运行完成自动保存能力:
- 先安装依赖:
pip install papermill - 给Notebook B添加参数接收单元格:打开B,新建一个单元格放在最开头,给该单元格打上
parameters标签(Jupyter Lab在右侧属性面板的「单元格标签」处添加,Jupyter Notebook经典界面在「视图 → 单元格工具栏 → 标签」开启后添加),单元格内仅需要定义参数的默认值即可,示例:
# 本单元格已打parameters标签 user_id = "default" data_df = None start_time = "2024-01-01"
- 在Notebook A中执行以下代码,即可将A中的变量传递给B、按顺序完整运行B、自动保存运行后的B文件:
import papermill as pm pm.execute_notebook( input_path="./notebook_b.ipynb", # 你的B文件路径 output_path="./notebook_b.ipynb", # 运行后保存的路径,可自定义,不想覆盖原文件可改名为其他 parameters={ "user_id": current_user_id, # current_user_id是A中已定义的变量 "data_df": a_calculated_df, # A中计算好的DataFrame也可直接传递 "start_time": query_start } )
方案二:内置%run魔术命令(无额外依赖)
不需要安装第三方包,适合轻量场景:
- 直接在Notebook A的单元格中运行:
%run ./notebook_b.ipynb - 运行后A内核中的所有变量会自动共享给B,B会按原有顺序自上而下全部运行
- 注意:该方法默认不会自动保存B的运行结果到本地ipynb文件,若需要自动保存,仅需在B的最后一个单元格添加以下代码即可:
from IPython.display import Javascript import time # 等待所有输出渲染完成后自动保存 time.sleep(3) display(Javascript('IPython.notebook.save_checkpoint();'))
HTML导出说明
你当前使用的jupyter nbconvert notebook_b.ipynb --no-input --no-prompt --to html命令可以直接复用,等B运行保存完成后执行即可得到无代码、无输入提示的纯分析结果HTML文件,适合非技术人员查看。
内容的提问来源于stack exchange,提问作者Adler Müller
相关产品推荐
相关产品推荐

