定义
Jupyter 最初指一套围绕计算笔记本展开的软件体系,其中最重要的产物是网页版笔记本编辑器 Jupyter Notebook 与更新一代的 JupyterLab[1]。所谓计算笔记本,是一种可以共享的文档,把计算机代码、自然语言说明、数据、图表与三维模型等富媒体内容以及交互控件组合在一起[1]。
在日常使用中,「Jupyter」一词既可指整个项目,也可指某个具体应用或那套以 .ipynb 为扩展名的笔记本文件格式,含义需要结合语境判断[2]。笔记本与编辑器配合,为代码的原型验证与讲解、数据的探索与可视化以及想法的分享提供了一个可以即时反馈的环境[1]。该项目由全球志愿者和贡献者社区开发,软件免费且开源[2]。
原理
Jupyter 的运行方式建立在读-求值-打印-循环(REPL)这一交互式编程技术之上。程序员写下代码片段,系统先读取再执行,把结果输出到显示区,然后等待下一段代码,如此循环往复。由于循环过程中创建的对象会一直留在内存里,后面的代码可以引用前面定义的变量,用户得以随时改写、重跑和调整代码而不必从头开始。
在 Jupyter 生态中,每个笔记本对应的这样一个 REPL 称为内核(kernel)。内核是独立运行的操作系统进程,负责按用户所选语言执行代码并返回输出,同时响应制表符补全和内省请求[3]。笔记本通过交互式计算协议与内核通信,该协议是基于 ZMQ 与 WebSocket 传输 JSON 数据的开放网络协议[3]。内核的创建与管理由 Jupyter Server 在后台协调[1]。
整体架构采用客户端-服务器模式:界面部分是浏览器中的网页应用,后台是负责内核通信的服务器,两者通过 HTTP 等通用网络技术与内核交换信息,因此同一个内核可以同时连到多个编辑程序[1]。这种模块化拆分让第三方能够替换或扩展其中任一环节。Project Jupyter 公开了内核通信所依据的协议标准,任何人只要实现该协议,就能为 Jupyter 增加新的编程语言支持或自行设计新的交互式编程界面[1]。
笔记本文件以 .ipynb 为扩展名,采用基于 JSON 的开放文档格式,把单元格内容、程序输出和元数据保存在同一个结构化文本文件中,由 nbformat 库负责解释与修改[2]。从形式上看,代码单元的计算过程可以抽象为对内核状态的连续变换:
flowchart LR
A[用户编辑代码单元] --> B[Jupyter Server 转发] --> C[内核执行] --> D[返回输出与富媒体结果] --> A
发展历程
Jupyter 的前身是交互式 Python 工具 IPython。2001 年,费尔南多·佩雷斯(Fernando Pérez)以研究生身份发布了这一开源项目,目的是为 Python 提供功能更强的交互式命令行环境[4]。它在早期便从 Mathematica 的笔记本界面上获得灵感,试图改善交互式计算的使用体验[5]。
2004 年前后,物理学家布莱恩·格兰杰(Brian Granger)、明·拉根-凯利(Min Ragan-Kelley)等人加入,与佩雷斯共同推进 IPython 的开发,其间产生了若干笔记本原型[6]。2011 年,团队在完成首个交互式客户端-服务器工具(Qt 控制台)以及整个夏季的编程冲刺之后,发布了第一个版本的 IPython Notebook,即浏览器端笔记本应用,这被视为今天 Project Jupyter 的起点[4]。
2014 年,该项目在 SciPy 科学计算会议上正式以「Jupyter」这一名称亮相[4]。自 2015 年发布的 IPython 4.0 起,与语言无关的组件被拆分到 Project Jupyter,IPython 则专注于作为 Python 内核与终端界面[5]。此后支持的语言范围不断扩大,由第三方开发的内核覆盖了上百种编程语言和环境[7]。
2018 年,Project Jupyter 发布了新一代网页界面 JupyterLab,并在随后几年陆续推出 1.0 至 4.0 等版本[8]。经典 Jupyter Notebook 一度进入维护状态,后经社区反馈,项目方于 2021 年底决定继续开发该应用,并以基于 JupyterLab 组件构建的 Notebook 7 形式发布,保留了以文档为中心的界面风格[9]。
2017 年,美国计算机协会(ACM)将软件系统奖授予费尔南多·佩雷斯及其团队,表彰 Project Jupyter 在交互式计算方面的贡献,称其已成为研究、教育、新闻和工业领域数据分析的通行标准[7]。
应用
在科学研究中,笔记本常被用于让论文结论可被复核。激光干涉引力波天文台(LIGO)发现引力波的工作获得 2017 年诺贝尔物理学奖,其开放科学中心发布 Jupyter 笔记本,使任何人都能复现原始分析[7]。美国能源部的系统生物学知识库平台也以 Jupyter 笔记本为核心设计,可自动记录科学家所用的代码与操作顺序,并支持一键发布、申请数字对象标识符[6]。
在教学场景中,笔记本被用来编写「可执行教材」。加州大学伯克利分校的数据科学课程通过 JupyterHub 向学生提供云端交互式教材,学生只需浏览器和校内账户即可使用[7]。JupyterHub 是多用户管理系统,负责验证用户身份并为其分配各自独立的笔记本实例与环境,可部署在单机、集群或云中的容器里[2]。
在数据科学与工业界,笔记本支持的语言超过 40 种,包括 Python、R、Julia 和 Scala,可与 Apache Spark 等大数据工具协同工作[3]。代码能够生成 HTML、图像、视频、LaTeX 等富交互输出,笔记本也可通过电子邮件、GitHub 等途径分享[3]。云计算平台上的在线笔记本服务同样基于这一体系,把计算资源与笔记本的使用协调起来[10]。
局限
笔记本的执行顺序由用户手动控制,单元格先后运行产生的状态会彼此影响。若原作者在运行过程中跳过或调整了单元格顺序,后来者从头运行时可能得到不同结果,这使结果的可复现性面临挑战[11]。有研究分析了 GitHub 上拥有有效执行顺序的 863878 个笔记本,发现其中仅约 24% 可以重新运行,能复现原结果的更只有约 4%[12]。
笔记本文件不记录库依赖及其固定版本,也不像传统编程环境那样配有单独的环境配置文件,因此换一台机器或换一个环境后代码可能无法运行[13]。以 JSON 格式存储的 .ipynb 文件与 Git 等版本控制工具的配合也不如纯代码文件顺畅,用其跟踪实验变化需要额外步骤[14]。此外,在划分为多个单元格的界面中使用代码检查工具较为困难,类的定义也无法跨多个单元格,这些特点可能不利于模块化与面向对象的编程实践[11]。
参见
-
IPython —— Jupyter 的前身,同时是其默认的 Python 内核。
-
JupyterLab —— Project Jupyter 发布的下一代网页版笔记本界面。
-
JupyterHub —— 把 Jupyter 部署给多用户的集中管理系统。
-
Python —— Jupyter 最初支持并最常配合使用的编程语言之一。
-
计算笔记本 —— Jupyter 所围绕的核心文档形式。
-
可读编程 —— 由唐纳德·克努斯提出、笔记本叙事方式所继承的编程理念。
参考资料
- Project Jupyter Documentation# [引用日期2026-10-14]
- 什么是 Jupyter?—Jupyter 文档 4.1.1 alpha 文档 [引用日期2026-10-14]
- Project Jupyter | 主页 [引用日期2026-10-14]
- Jupyter receives the ACM Software System Award [引用日期2026-10-14]
- About IPython [引用日期2026-10-14]
- eurekalert.org 上的网页 [引用日期2026-10-14]
- Fernando Perez [引用日期2026-10-14]
- INTERACTIVE HPC WITH JUPYTERLAB [引用日期2026-10-14]
- Announcing Jupyter Notebook 7 [引用日期2026-10-14]
- jupyter-notebooks [引用日期2026-10-14]
- 页面比较 [引用日期2026-10-14]
- Why Stanford scientists needed a new Python notebook [引用日期2026-10-14]
- arxiv.org 上的网页 [引用日期2026-10-14]
- FAQ [引用日期2026-10-14]