什么是 Jupyter Notebook?#
简介#
Jupyter Notebook 是一种交互式计算环境,使用户能够编写包含以下内容的笔记本文档: - 实时代码 - 交互式小部件 - 图表 - 说明性文本 - 方程式 - 图像 - 视频
这些文档提供了计算的完整且自包含的记录,可以转换为各种格式并使用电子邮件、Dropbox、版本控制系统(如 git/GitHub)或 nbviewer.jupyter.org 与他人共享。
组件#
Jupyter Notebook 结合了三个组件
笔记本 Web 应用程序:一个交互式 Web 应用程序,用于交互式编写和运行代码以及编写笔记本文档。
内核:由笔记本 Web 应用程序启动的独立进程,在给定语言中运行用户代码并将输出返回到笔记本 Web 应用程序。内核还处理交互式小部件的计算、选项卡补全和内省等操作。
笔记本文档:自包含的文档,包含笔记本 Web 应用程序中所有可见内容的表示,包括计算的输入和输出、说明性文本、方程式、图像以及对象的富媒体表示。每个笔记本文档都有自己的内核。
笔记本 Web 应用程序#
笔记本 Web 应用程序使用户能够
内核#
通过 Jupyter 的内核和消息传递架构,Notebook 允许在多种不同的编程语言中运行代码。对于用户打开的每个笔记本文档,Web 应用程序都会启动一个内核来运行该笔记本的代码。每个内核都能够用单一编程语言运行代码,并且以下语言都有可用的内核:
Python(ipython/ipython)
Julia (JuliaLang/IJulia.jl)
Ruby (minrk/iruby)
Haskell (gibiansky/IHaskell)
Scala (Bridgewater/scala-notebook)
node.js (https://gist.github.com/Carreau/4279371)
Go (takluyver/igo)
默认内核运行 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。