You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jupyter Lab中实现自动运行当前单元格的后续单元格?

问题:Jupyter Lab中实现运行当前单元格后自动运行后续单元格

我使用Python环境,搭配JupyterLab 3.6.7、Notebook 6.5.6(依赖jupyterlab_pygments 0.3.0、jupyterlab-widgets 3.0.9),想要实现当前单元格运行后自动运行后续单元格。

在Jupyter Notebook 6.5.6中,以下代码可以正常运行当前单元格及之后2个单元格:

from IPython.display import Javascript
display(Javascript('IPython.notebook.execute_cell_range(IPython.notebook.get_selected_index(), IPython.notebook.get_selected_index()+2)'))

但在Jupyter Lab 3.6.7中运行时出现错误:Javascript Error: IPython is not defined。

请问是否可在Jupyter Lab中实现该功能?若可以,具体如何操作?

相关核心包版本:

IPython          : 8.12.3
ipykernel        : 6.29.0
ipywidgets       : 8.1.1
jupyter_client   : 7.4.9
jupyter_core     : 5.7.1
jupyter_server   : 2.12.5
jupyterlab       : 3.6.7
nbclient         : 0.9.0
nbconvert        : 7.14.2
nbformat         : 5.9.2
notebook         : 6.5.6
qtconsole        : 5.5.1
traitlets        : 5.14.1

解决方法

Jupyter Lab的前端API和经典Notebook不同,IPython全局对象不存在,需要使用Jupyter Lab的原生前端API来操作单元格,以下是两种可行方案:

方案1:运行当前单元格及指定数量的后续单元格

将代码中的+2替换为你需要的后续单元格数量,即可运行当前单元格及之后对应数量的单元格:

from IPython.display import Javascript

display(Javascript("""
// 获取当前激活的单元格
const activeCell = document.querySelector('.jp-Cell.jp-mod-active');
if (!activeCell) return;

// 获取单元格所在的笔记本面板
const notebookPanel = activeCell.closest('.jp-NotebookPanel');
const notebook = notebookPanel.widgets[0];

// 获取当前单元格的索引
const currentIndex = notebook.widgets.indexOf(activeCell);

// 计算结束索引(当前单元格+后续2个,可修改数字调整)
const endIndex = currentIndex + 2;

// 遍历执行目标单元格,避免索引越界
for (let i = currentIndex; i <= endIndex && i < notebook.widgets.length; i++) {
  notebook.widgets[i].execute();
}
"""))

方案2:运行当前单元格之后的所有单元格

如果需要一次性运行当前单元格之后的全部单元格,使用以下代码:

from IPython.display import Javascript

display(Javascript("""
const activeCell = document.querySelector('.jp-Cell.jp-mod-active');
if (!activeCell) return;

const notebookPanel = activeCell.closest('.jp-NotebookPanel');
const notebook = notebookPanel.widgets[0];

const currentIndex = notebook.widgets.indexOf(activeCell);

// 从当前单元格开始,执行到最后一个单元格
for (let i = currentIndex; i < notebook.widgets.length; i++) {
  notebook.widgets[i].execute();
}
"""))

注意事项

  • 代码通过DOM选择器定位当前单元格,再获取对应笔记本实例执行操作,适配Jupyter Lab 3.x版本。
  • 如果当前单元格是最后一个,代码会自动终止,不会触发索引越界错误。

内容的提问来源于stack exchange,提问作者Tibu Teek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:21