Jupyter 笔记本:如何仅执行具有特定标签的单元格



我正在创建一个小部件,该小部件将仅执行笔记本中的某些单元格 - 根据更改的数据生成新绘图。而Jupyter可以执行诸如执行笔记本中的所有单元格或执行当前单元格下的所有单元格等操作。

相反,我想为要有选择地执行的单元格创建标签。然后,当我按下按钮时,我可以执行此代码并运行单元格。

小部件代码本身并不重要——这部分很容易。更难的事情是弄清楚如何在笔记本中实现python和javascript之间的通信。任何人都有任何想法。

所以我想通了。我想其他人一直在寻找类似的答案,所以我正在发布它。

首先,我必须在笔记本中标记相关单元格。您可以通过笔记本中的"视图"和"单元格工具栏"执行此操作。

其次,创建具有这些函数的代码单元。第一个函数将得到 具有特定标签的所有单元格。第二个单元格将运行具有以下所有单元格 那个标签。就我而言,标签名称是"plotcell",但这可以更改为任何内容。这个单元在尝试使用这个函数之前需要运行,所以我通常把它作为一个初始化单元。

%%javascript
window.findCellIndicesByTag = function findCellIndicesByTag(tagName) {
return (Jupyter.notebook.get_cells()
.filter(
({metadata: {tags}}) => tags && tags.includes(tagName)
)
.map((cell) => Jupyter.notebook.find_cell_index(cell))
);
};
window.runPlotCells = function runPlotCells() {
var c = window.findCellIndicesByTag('plotcell');
Jupyter.notebook.execute_cells(c);
};

最后,若要运行此代码,需要使用以下代码:

from IPython.core.display import Javascript
from IPython.display import display
def runPlotCells():
display(Javascript("window.runPlotCells()"))

此代码将执行先前创建的 Javascript 函数来运行 PlotCells。我使用了display函数,以便禁止显示笔记本中的输出,并在浏览器开发人员控制台中显示结果。

然后,在按钮的 on_click 事件之后运行此函数。

应该就是这样。

最新更新