什么是 Jupyter Notebook?#

简介#

Jupyter Notebook 是一个交互式计算环境,它使用户能够创建包含以下内容的 notebook 文档:

  • 实时代码

  • 交互式小部件

  • 图表

  • 叙述性文本

  • 方程式

  • 图片

  • 视频

这些文档提供了一次计算的完整且自包含的记录,可以转换为各种格式,并通过电子邮件、Dropbox、版本控制系统(如 git/GitHub)或 nbviewer.jupyter.org 与他人共享。

组件#

Jupyter Notebook 结合了三个组件:

  • Notebook Web 应用程序:一个交互式的 Web 应用程序,用于交互式地编写和运行代码,以及创作 notebook 文档。

  • 内核:由 notebook Web 应用程序启动的独立进程,它以给定的语言运行用户的代码,并将输出返回给 notebook Web 应用程序。内核还处理诸如交互式小部件的计算、制表符补全和内省等事务。

  • Notebook 文档:自包含的文档,其中包含了 notebook Web 应用程序中所有可见内容的表示,包括计算的输入和输出、叙述性文本、方程式、图像以及对象的富媒体表示。每个 notebook 文档都有自己的内核。

Notebook Web 应用程序#

Notebook Web 应用程序使用户能够:

  • 在浏览器中编辑代码,具有自动语法高亮、缩进和制表符补全/内省功能。

  • 从浏览器运行代码,计算结果会附加在生成它们的代码之后。

  • 富媒体表示形式查看计算结果,例如 HTML、LaTeX、PNG、SVG、PDF 等。

  • 创建和使用交互式 JavaScript 小部件,这些小部件将交互式用户界面控件和可视化效果绑定到响应式的内核端计算。

  • 使用 Markdown 标记语言编写叙述性文本

  • 在 Markdown 中使用 LaTeX 语法包含数学方程式,这些方程式由 MathJax 在浏览器中渲染。

内核#

通过 Jupyter 的内核和消息传递架构,Notebook 允许代码以一系列不同的编程语言运行。对于用户打开的每个 notebook 文档,Web 应用程序都会启动一个内核来运行该 notebook 的代码。每个内核都能运行单一编程语言的代码,并且有适用于以下语言的内核:

默认内核运行 Python 代码。Notebook 为用户提供了一种简单的方法来选择为给定的 notebook 使用哪个内核。

这些内核中的每一个都使用一种基于 ZeroMQ/WebSockets 的 JSON 消息协议与 notebook Web 应用程序和 Web 浏览器进行通信,该协议在这里有详细描述。大多数用户不需要了解这些细节,但理解“内核运行代码”这一点会有所帮助。

Notebook 文档#

Notebook 文档包含交互式会话的输入和输出,以及伴随代码但并非用于执行的叙述性文本。通过运行代码生成的富媒体输出,包括 HTML、图像、视频和图表,都被嵌入到 notebook 中,这使其成为一次计算的完整且自包含的记录。

当您在计算机上运行 notebook Web 应用程序时,notebook 文档只是本地文件系统上带有 .ipynb 扩展名的文件。这使您可以使用熟悉的工作流程来将您的 notebook 组织到文件夹中并与他人共享。

Notebook 由线性单元格序列组成。有三种基本的单元格类型:

  • 代码单元格: 在内核中运行的实时代码的输入和输出

  • Markdown 单元格: 带有嵌入式 LaTeX 方程式的叙述性文本

  • 原始单元格: 未经格式化的文本,在使用 nbconvert 将 notebook 转换为不同格式时,这些文本会被原封不动地包含进去

在内部,notebook 文档是 JSON 数据,其中的二进制值经过 base64 编码。这使得它们可以被任何编程语言以编程方式读取和操作。由于 JSON 是一种文本格式,因此 notebook 文档对版本控制很友好。

使用 Jupyter 的 nbconvert 工具,Notebook 可以被导出为不同的静态格式,包括 HTML、reStructeredText、LaTeX、PDF 和幻灯片(reveal.js)。

此外,任何可从公共 URL 或 GitHub 上获取的 notebook 文档都可以通过 nbviewer 共享。该服务从 URL 加载 notebook 文档,并将其渲染为静态网页。因此,生成的网页可以与他人共享,而他们无需安装 Jupyter Notebook