什么是 Jupyter Notebook?#

简介#

Jupyter Notebook 是一种交互式计算环境,使用户能够编写包含以下内容的笔记本文档: - 实时代码 - 交互式小部件 - 图表 - 说明性文本 - 方程式 - 图像 - 视频

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

组件#

Jupyter Notebook 结合了三个组件

  • 笔记本 Web 应用程序:一个交互式 Web 应用程序,用于交互式编写和运行代码以及编写笔记本文档。

  • 内核:由笔记本 Web 应用程序启动的独立进程,在给定语言中运行用户代码并将输出返回到笔记本 Web 应用程序。内核还处理交互式小部件的计算、选项卡补全和内省等操作。

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

笔记本 Web 应用程序#

笔记本 Web 应用程序使用户能够

  • 在浏览器中编辑代码,具有自动语法高亮显示、缩进和选项卡补全/内省功能。

  • 从浏览器运行代码,将计算结果附加到生成它们的代码。

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

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

  • 使用Markdown 标记语言编写说明性文本

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

内核#

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

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

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

笔记本文档#

笔记本文档包含交互式会话的输入和输出,以及叙述性文本,这些文本伴随着代码,但并非用于执行。通过运行代码生成的丰富输出,包括 HTML、图像、视频和绘图,都嵌入在笔记本中,这使其成为计算的完整且独立的记录。

当您在计算机上运行笔记本 Web 应用程序时,笔记本文档只是本地文件系统上的文件,扩展名为 .ipynb。这使您可以使用熟悉的流程将笔记本整理到文件夹中并与他人共享。

笔记本由线性单元序列组成。有三种基本单元类型

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

  • Markdown 单元:包含嵌入式 LaTeX 方程式的叙述性文本

  • 原始单元:使用 nbconvert 将笔记本转换为不同格式时,包含的未格式化文本,不会进行修改

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

笔记本可以导出为不同的静态格式,包括 HTML、reStructeredText、LaTeX、PDF 和幻灯片 (reveal.js),使用 Jupyter 的 nbconvert 实用程序。

此外,任何来自公共 URL 或 GitHub 的笔记本文档都可以通过 nbviewer 共享。此服务从 URL 加载笔记本文档并将其呈现为静态网页。因此,生成的网页可以与他人共享,而无需他们安装 Jupyter Notebook