如何在Sphinx中使用Jupyter笔记本

朱庇特笔记本是描述计算叙事的常用工具混合代码、散文、图像、交互式组件等。将它们嵌入到Sphinx项目中可以将这些丰富的文档用作文档,它可以为教程、示例和其他类型的技术内容提供很好的体验。有一些扩展允许集成Jupyter和Sphinx,本文档将解释如何实现一些最常见的功能。

包括经典.ipynb文件Sphinx文档中的笔记本

在Sphinx中,有两个主要扩展添加了支持Jupyter笔记本的源文件:nbsphinx公司MyST-NB公司它们具有类似的意图和基本功能:两者都可以在中阅读笔记本.ipynb文件和支持的其他格式朱皮文和的配置方式类似(请参见现有相关扩展了解更多关于它们差异的背景)。

首先,使用您喜欢的编辑器创建一个Jupyter笔记本(例如,JupyterLab公司).例如,源/笔记本/示例 1.ipynb公司:

在JupyterLab上创建的Jupyter笔记本示例

在JupyterLab上创建的Jupyter笔记本示例

接下来,您需要启用其中一个扩展,如下所示:

conf.py公司
扩展 = [
    “nbsphinx”
]

最后,您可以在任何目录树.例如,将其添加到根文档中:

.. 目录树::
   :最大深度:2:标题:内容:笔记本电脑/示例1

笔记本将呈现为文档中的任何其他HTML页面做了之后制作 html格式.

nbsphinx在HTML上呈现的Jupyter笔记本示例

nbsphinx在HTML上呈现的Jupyter笔记本示例

为了进一步自定义渲染过程,请参阅nbsphinx公司MyST-NB公司文档。

渲染交互式小部件

小部件是在浏览器中有表示的事件python对象您可以使用它为笔记本构建交互式GUI。基本小部件使用ipywidgets软件包括滑块、文本框和按钮等控件,更复杂的小部件包括交互式地图,如异丙基荧光.

您可以在HTML Sphinx文档中嵌入这些交互式小部件。要使其发挥作用,必须保存小部件状态在生成HTML文档之前,否则,小部件将显示为空。每个编辑器都有不同的操作方式:

  • 经典的Jupyter笔记本界面在“小工具”菜单中提供了“保存笔记本小工具状态”操作,如ipywidgets中所述文档.您需要在将笔记本导出为HTML之前单击它。

  • JupyterLab在“设置”菜单中提供了“自动保存小工具状态”选项。您需要选中它,以便自动保存小部件状态。

  • 在Visual Studio代码中无法保存小部件状态编写时(2021年6月)。

自动保存交互式小部件状态的JupyterLab选项

自动保存交互式小部件状态的JupyterLab选项

例如,如果您使用简单的IntSlider(积分滑块)来自ipywidgets的小部件并保存小部件状态,滑块将在狮身人面像中正确渲染。

Sphinx以HTML呈现的交互式小部件

Sphinx以HTML呈现的交互式小部件

要查看更详细的示例:

警告

尽管小部件本身可以嵌入HTML,事件需要后端(内核)才能执行。因此,@相互作用.观察以及依赖于它们的相关功能不会按预期工作。

注意

如果您的小部件需要一些额外的JavaScript库,您可以使用添加它们添加js_file().

使用其他格式的笔记本

例如,一个简单的笔记本在MyST Markdown格式中是这样的:

示例3.md
---jupytext:文本_演示:扩展名:.md格式名:myst格式_版本:0.13jupytext版本:1.10.3内核规范:display_name:Python 3语言:python名称:python3---#纯文本笔记本格式这是以MyST Markdown格式存储的Jupyter笔记本的示例。```{code-cell}ipython3导入系统打印(系统版本)``````{code-cell}ipython3从IPython.display导入图像``````{code-cell}ipython3图像(“http://sipi.usc.edu/database/preview/misc/4.2.03.png")```

在狮身人面像中渲染此笔记本您需要将此添加到您的conf.py公司:

确认.py
nbsphinx自定义格式 = {
    “.md”: [“jupytext.reads” {“柔性制造技术”: “mystnb”}],
}

请注意,Markdown格式不存储计算的输出。Sphinx将自动执行没有输出的笔记本,所以在HTML文档中,它们看起来是完整的。

使用笔记本创建示例库

nbsphinx公司支持从Jupyter列表创建缩略图库笔记本电脑.此功能依赖于狮身人面像画廊并将其扩展到使用Jupyter笔记本而不是Python脚本。

要使用它,您需要安装nbsphinx和Sphinx-Gallery,并修改您的conf.py公司如下:

conf.py公司
扩展 = [
    “nbsphinx”
    “sphinx_gallery.load_style”
]

完成此操作后,有两种方法可以创建库:

  • 从reStructuredText源文件中,使用.. nbgallery::指令,如中所示文档.

  • 从Jupyter笔记本,添加“nbsphinx-画廊”标记到单元格的元数据。每个编辑器都有不同的修改单元元数据的方法(参见下图)。

用于修改JupyterLab中的单元元数据的面板

用于修改JupyterLab中的单元元数据的面板

例如,这个reST标记将创建一个缩略图库使用通用图像作为缩略图,得益于Sphinx-Gallery的默认风格:

缩略图库
==================

.. nb画廊::笔记本/示例1笔记本电脑/示例2
使用nbsphinx创建的简单缩略图库

使用nbsphinx创建的简单缩略图库

要查看野生笔记本电脑图库的一些示例:

背景

现有相关扩展

在本文件的第一部分我们已经看到了nbsphinx公司MyST-NB公司都是类似的。然而,它们之间存在一些差异:

  • nsphinx使用潘多克将标记从Jupyter笔记本转换为reStructuredText然后到docutils AST公司而MyST-NB使用MyST分析器将Markdown文本直接转换为docutils AST。因此,nbsphinx假设潘多克风味的降价而MyST-NB使用MyST风味降价.两种Markdown口味基本相同,但它们有一些不同。

  • nbsphinx在解析阶段执行每个笔记本,而MyST-NB可以提前执行所有笔记本并用缓存它们jupyter缓存.这可以在修改笔记本时缩短构建时间如果使用MyST-NB。

  • nbsphinx提供创建缩略图库的功能,而MyST-NB目前没有这种功能(请参见使用笔记本创建示例库有关图库的更多信息)。

  • MyST-NB允许在文档中嵌入来自笔记本的Python对象(阅读他们的“粘合”文档更多信息)并提供更复杂的错误报告比nbsphinx的还多。

  • 代码单元及其输出的视觉外观略有不同:nbsphinx默认呈现单元格编号,而MyST-NB没有。

决定使用哪一个取决于您的用例。作为一般建议:

替代笔记本格式

Jupyter笔记本电脑.ipynb文件格式(如nb格式文档)由于历史原因,是迄今为止使用最广泛的。

然而,为了弥补.ipynb公司格式(如与版本控制系统的繁琐集成),朱皮文提供其他格式基于纯文本而非JSON。

因此,有三种操作模式:

  • 使用经典.ipynb文件笔记本电脑。这是最简单的选择,因为所有工具都准备好与它们一起工作,并且不需要额外的软件。因此,它更易于管理,因为运动部件更少。然而,在使用版本控制系统(如git)时需要小心,通过执行以下操作之一:

    • 提交前清除输出。尽量减少冲突,但可能会破坏笔记本本身的用途,因为不存储计算结果。

    • 使用以下工具nbdime公司(开源)审查NB(专有)改进审查过程。

    • 使用不涉及笔记本的其他协作工作流。

  • 更换.ipynb文件笔记本电脑基于文本的格式.这些格式在版本控制下表现更好它们也可以用普通的文本编辑器进行编辑不支持基于单元格的JSON笔记本。然而,基于文本的格式不存储单元格的输出,这可能不是你想要的。

  • 配对.ipynb文件基于文本格式的笔记本,并将基于文本的文件置于版本控制中,jupytext文档.此解决方案兼具两个方面的优点。在一些罕见的情况下,您可能会遇到两个文件之间的同步问题。

这些方法不是相互排斥的,也不必对所有笔记本使用单一格式。对于本文档中的示例,我们使用了MyST降价格式.

如果您正在为Jupyter笔记本使用其他格式,您可以将其包含在Sphinx文档中使用其中之一nbsphinx公司MyST-NB公司(请参见现有相关扩展有关它们之间差异的更多信息)。