`jupyter notebook` 和 `jupyter server` 有什么区别?

What is the difference between `jupyter notebook` and `jupyter server`?

运行 jupyter notebookjupyter server 给我的结果非常相似,描述也很相似。

❯ jupyter notebook -h
The Jupyter HTML Notebook.

This launches a Tornado based HTML Notebook Server that serves up an
HTML5/Javascript Notebook client.

❯ jupyter server -h
The Jupyter Server.

This launches a Tornado-based Jupyter Server.

有些差异,例如 server 无法加载 nbextensions,但我不明白为什么有两个命令有如此多的重叠。

供参考,这是各种模块的版本。

❯ jupyter --version
jupyter core     : 4.7.1
jupyter-notebook : 6.3.0
qtconsole        : 5.0.3
ipython          : 7.22.0
ipykernel        : 5.3.4
jupyter client   : 6.1.12
jupyter lab      : 3.0.11
nbconvert        : 6.0.7
ipywidgets       : 7.6.3
nbformat         : 5.1.3
traitlets        : 5.0.5

Jupyter 笔记本(notebook 模块)包含:

  • 笔记本服务器(托管笔记本内容的 Web 应用程序的后端,代理与内核的交互,并通过例如在启动时打开互联网浏览器与操作系统交互;这部分通常写在 Python), 和
  • 客户端(Web 应用程序的前端,例如 HTML 代码,javascript,以及服务器上的一些额外的 REST API 点)。

但是,由于现在有多个客户端(前端)为笔记本提供不同的 Web 应用程序:

  • Jupyter 笔记本
  • JupyterLab
  • RetroLab
  • nteract
  • 在 Jupyter 项目之外开发的多个专有客户端

拆分所有这些使用的服务器组件是有意义的,例如JupyterLab 不必依赖笔记本。这也意味着如果需要对服务器组件进行修复,它可以独立于 Jupyter Notebook 发布周期而快速发布(所有前端的用户都可以立即受益)。

因此,为了彻底分手,旧的 Jupyter Notebook 被拆分为:

  • jupyter-server - 由 JuptyterLab、RetroLab、ntreact 适配的服务器
  • nbclassic - 作为 jupyter-server 扩展的 Jupyter Notebook

这意味着对用户和开发人员的更改,一些已在 "migrate from notebook" 文档中描述:

  • 特定于服务器而非笔记本的选项已从 c.NotebookApp 重命名为 c.ServerApp(特定于笔记本的选项保持 c.NotebookApp
  • 服务器特定配置现在存储在 jupyter_server_config.py 而不是 jupyter_notebook_config.py.json 版本相同)
  • 用户现在应该使用 jupyter server extension 而不是 jupyter serverextension(注意额外的 space!)来列出、启用或禁用扩展程序
  • 服务器扩展需要将它们的文件放在新位置:etc/jupyter/jupyter_server_config.d 而不是 etc/jupyter/jupyter_notebook_config.d(实际上,大多数已更新以支持 jupyter 服务器的扩展现在都将文件放在两个位置与笔记本向后兼容,但这将在未来改变)

请务必注意,根据您启动 jupyter notebook 的方式,您会看到正在使用不同的服务器:

  • jupyter nbclassic(假设安装了 nbclassic)将使用新的 jupyter-server
  • jupyter notebook 将使用旧的 notebook 服务器
  • jupyter lab 将使用新的 jupyter-server 从 JupyterLab 3.0 开始,除非 运行 在 JupyterHub/Binder 上它可能仍在使用旧的 notebook 服务器,具体取决于配置

这也意味着当 运行 jupyter notebookjupyter nbclassic 时,您可能会看到不同的扩展(取决于他们的开发人员是否更新了位置,以及他们是否决定支持遗留 notebook 服务器)。

创建 nbclassic 替换而不是从现有 notebook 包中删除服务器代码是为了确保向后兼容性,这就是为什么你仍然有两个 Tornado 服务器副本(一份由 jupyter notebook 提供,一份由 jupyter server 提供)。为了使情况更简单,您可以删除 notebook 并安装 nblcassic,但鉴于转换正在进行中,您可能需要手动调整一些内容。但是,这只是暂时的情况,因为计划从 v7.0 开始将 Notebook 迁移到使用 jupyter server

目前这可能看起来不方便,但此步骤可确保未来核心 Jupyter 基础架构具有更好的可维护性,并且以后将使用户和系统管理员受益匪浅。