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

3
我正在创建一个小部件,它将仅执行笔记本中的特定单元格--以基于更改的数据生成新图。虽然Jupyter可以执行笔记本中的所有单元格,或者执行当前单元格下面的所有单元格等操作,但我想创建单元格的标签来选择性地执行它们。然后,当我点击按钮时,我就可以执行这段代码并运行这些单元格。
小部件代码本身并不重要--那部分很容易。更难的是如何在笔记本内实现Python和JavaScript之间的通信。有没有人有任何想法?
1个回答

5
我研究了一下,发现其他人也在寻找类似的答案,所以我在发布它。首先,我需要标记笔记本中相关的单元格。您可以通过笔记本中的“查看”,然后“单元格工具栏”来完成。其次,创建一个带有以下功能的代码单元格。第一个函数将获取所有具有某个标签的单元格。第二个单元格将运行所有具有该标签的单元格。在我的情况下,标签名为'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函数runPlotCells。我使用了display函数来抑制笔记本中的输出,并使结果在浏览器开发者控制台中可见。
然后,在单击按钮后,您就可以运行此函数。
就这样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接