Jupyter Notebook 7 配置完全指南:通用配置系统、Jupyter Server 与扩展定制
【免费下载链接】notebookJupyter Interactive Notebook项目地址: https://gitcode.com/GitHub_Trending/no/notebook
Jupyter Notebook 7(即本仓库notebook项目)在继承 Notebook 经典交互体验的同时,底层已全面迁移到 Jupyter Server 与 JupyterLab 扩展体系。本文以仓库文档 docs/source/configuration.md 及其下辖的配置文档为核心,系统讲解 Notebook 7 的三层配置能力:Jupyter 通用配置系统、Jupyter Server 服务端配置,以及基于前端扩展的界面与功能定制。读完本文,你将掌握从生成配置文件、调整服务端行为、禁用自定义 CSS,到通过高级设置编辑器重排界面布局、禁用特定插件按钮的完整实战方法。
一、配置总览:Notebook 7 的三个配置层次
参考仓库文档 docs/source/configuring/config_overview.md,除默认配置外,Jupyter Notebook 支持丰富的自定义选项,常见的配置领域集中在三个层次:
- Jupyter 通用配置系统(Common Configuration System):从 Notebook 到 JupyterHub、nbgrader,所有 Jupyter 应用共享同一套配置体系,创建配置文件、编辑设置的过程几乎一致;
- Jupyter Server:负责运行语言内核并与前端 Notebook 客户端(即熟悉的 Notebook 界面)通信;
- Notebook 扩展(Extensions):Notebook 7 前端可通过 JupyterLab 扩展机制进行扩展。
理解这三个层次,是后续所有配置操作的基础:通用配置系统决定"配置文件写在哪里、如何被解析",Jupyter Server 决定"服务进程如何启动、监听什么端口、加载哪些扩展",前端扩展则决定"界面长什么样、有哪些菜单和按钮"。
二、Jupyter 通用配置系统(Common Configuration System)
Jupyter 各应用(Notebook、JupyterHub、nbgrader 等)共享同一套基于 traitlets 的配置架构:
- 配置文件的查找遵循 Jupyter 通用目录约定(配置目录、数据目录、运行目录等);
- 所有可配置项本质上是 traitlets 定义的类型化属性,既支持在 Python 配置文件中赋值,也支持通过命令行参数以
--AppName.option=value的形式覆盖; - 语言内核(language kernels)同样是通用体系的一部分,docs/source/configuring/config_overview.md 指出内核机制让 Jupyter Server 可以运行 R、Julia 等其他语言。
2.1 禁用自定义 CSS(Disabling Custom CSS)
Jupyter Notebook 6 时代即有"自动加载自定义 CSS"的行为,Notebook 7 默认延续了这一行为:只要 Jupyter 配置目录下存在custom/custom.css文件(如~/.jupyter/custom/custom.css),页面加载时就会被读取并注入。若想关闭该行为,可在启动应用时传入:
jupyter notebook --JupyterNotebookApp.custom_css=False从源码看,该开关由 notebook/app.py 中的custom_csstrait 定义:
custom_css = Bool( True, config=True, help="""Whether custom CSS is loaded on the page. Defaults to True and custom CSS is loaded. """, )它同时被注册为命令行 flag(notebook/app.py),因此也支持更简洁的写法:
jupyter notebook --custom-css=False在服务端,CustomCssHandler(见 notebook/app.py)负责实际提供 CSS 内容:它优先读取{jupyterConfigDir}/custom/custom.css;若该文件不存在,则回退到静态资源目录旁的custom/custom.css。仓库中 notebook/custom/custom.css 就是一个占位示例,注释说明它"主要为 profile/static/custom/custom.css 所覆盖",本身始终为空文件。关闭custom_css后,该处理器不再被前端页面加载(模板中的custom_css全局变量来自 notebook/app.py),从而实现自定义样式的彻底禁用。
提示:如果你希望保留自定义 CSS 的加载,但临时排查某条样式是否生效,也可以直接在浏览器开发者工具中验证;
custom_css开关更适合作为"全局一键关闭"的手段。
三、Jupyter Server 配置
Notebook 7 的服务端由 Jupyter Server 承担。Jupyter Server 运行语言内核,并通过 HTTP 与前端 Notebook 客户端通信。
3.1 生成默认配置文件
在.jupyter目录下生成一份"所有默认项均以注释形式给出"的jupyter_server_config.py,使用:
jupyter server --generate-config生成的配置文件位于 Jupyter 配置目录(通常为~/.jupyter/jupyter_server_config.py)。之后你可以取消注释并修改其中的c.ServerApp.*、c.ServerProxy.*等选项。常用配置项包括:
| 配置项 | 作用 |
|---|---|
c.ServerApp.ip | 监听地址,默认localhost,公网部署常设为0.0.0.0 |
c.ServerApp.port | 监听端口,默认8888 |
c.ServerApp.token | 访问令牌,用于身份认证 |
c.ServerApp.root_dir | 服务根目录(Notebook 首页文件树展示的根目录) |
c.ServerApp.password | 以哈希形式配置的登录密码 |
c.ServerApp.open_browser | 启动后是否自动打开浏览器 |
3.2 Notebook 7 是 Jupyter Server 的扩展
与 Notebook 6 的独立notebook应用不同,Notebook 7 本身作为 Jupyter Server 的一个服务器扩展运行。仓库中的 jupyter-config/jupyter_server_config.d/notebook.json 清楚地展示了这一点:
{ "ServerApp": { "jpserver_extensions": { "notebook": true } } }该文件会被 Jupyter Server 在启动时自动读取,从而启用notebook扩展并注册JupyterNotebookApp。这意味着:任何能被 Jupyter Server 识别的配置方式(命令行参数、jupyter_server_config.py、jupyter_server_config.d/*.json)都可以用来配置 Notebook 7。
例如仓库根目录的 jupyter_config.json 演示了如何同时为两个应用设置页面配置:
{ "LabApp": { "expose_app_in_browser": true }, "JupyterNotebookApp": { "expose_app_in_browser": true } }其中的expose_app_in_browser对应 notebook/app.py 中定义的Bool配置项,用于决定是否把全局应用实例暴露到浏览器(window.jupyterapp),同时它也提供了--expose-app-in-browser命令行 flag(notebook/app.py)。
JupyterNotebookApp还定义了一系列其他可配置 trait,例如:
default_url:默认跳转地址,默认值为/tree(notebook/app.py);app_version:应用版本;- 各目录默认值(
static_dir、templates_dir、settings_dir、schemas_dir、themes_dir、user_settings_dir、workspaces_dir,见 notebook/app.py),这些决定了页面模板、前端设置、主题和工作区的查找位置。
3.3 Notebook 6 到 Notebook 7 的迁移注意点
Notebook 7 基于 Jupyter Server 构建,此前你可能使用过的一些 `notebook` 导入(如 `notebook.auth`、`notebook.notebookapp`)在新版本中已不再可用。如需迁移服务端代码,请参考仓库文档 docs/source/migrating/server-imports.md,其中说明了如何将旧的notebook.*导入更新为jupyter_server.*对应模块。
四、Notebook 扩展与插件管理
Notebook 7 使用了与 JupyterLab 相同的扩展系统:一个扩展(extension)可以提供多个插件(plugin)。扩展分为服务端扩展与前端扩展两类:
- 服务端扩展:通过
jpserver_extensions配置启用(如上面的notebook.json); - 前端扩展:在应用启动时由前端插件系统加载,菜单、工具栏、右键菜单等 UI 元素大多由前端插件提供。
4.1 实操示例:禁用文件浏览器的下载按钮
默认情况下,Notebook 7 的文件浏览器提供下载功能,它由一个上下文菜单入口和一个主菜单入口组成,二者由@jupyterlab/filebrowser-extension扩展中的download插件提供。要禁用文件浏览器右键菜单中的下载入口,在终端执行:
jupyter labextension disable @jupyterlab/filebrowser-extension:download然后重启应用并刷新页面即可生效。jupyter labextension disable <扩展名:插件名>会写入前端扩展的禁用状态,同样支持enable命令重新开启。
4.2 前端扩展的入口文档
更完整的扩展开发与加载说明见仓库文档 docs/source/extending/frontend_extensions.md(总览见 docs/source/extending/index.md)。前端扩展指南涵盖了插件注册、package.json元数据、Schema 约定等内容,是理解 Noteboo 7 插件体系的权威入口。
五、界面布局与菜单定制(Settings Editor)
Notebook 7 的界面元素默认分布在预定义的"区域(area)"中。例如目录(table of contents)默认显示在left区域,调试器(debugger)默认显示在right区域。不过,部分组件的摆放位置、工具栏与菜单项都可以通过"高级设置编辑器(Advanced Settings Editor)"进一步定制。
5.1 Notebook Shell 布局 Schema
布局配置对应的 Schema 位于 packages/application-extension/schema/shell.json。该 Schema 定义了layout对象,其默认值为:
{ "Debugger Console": { "area": "down" }, "Markdown Preview": { "area": "right" }, "Plugins": { "area": "left" } }每个组件可用的area取值(见 shell.json)包括:
| area 取值 | 含义 |
|---|---|
main | 主工作区(与 Notebook 并排) |
top | 顶部区域 |
menu | 菜单区域 |
left | 左侧栏 |
right | 右侧栏 |
down | 底部区域 |
此外,每个条目还支持options.rank(非负数字),用于在同区域内调整组件的相对排序。
5.2 示例一:将 Markdown 预览移到左侧
编辑 Markdown 文档时,若能同时看到渲染预览会很方便。默认情况下 Markdown Preview 打开在应用右侧,通过修改Notebook Shell设置可以把它放到左侧:
{ "layout": { "Markdown Preview": { "area": "left" } } }修改位置:菜单栏Settings → Advanced Settings Editor,左侧选择@jupyterlab/application-extension:shell(Notebook Shell),在右侧"User Settings"中粘贴上述 JSON 并保存。
5.3 示例二:将第三方组件(Voila Preview)移到右侧
第三方扩展同样可以向应用壳(application shell)添加组件。例如 Voila 扩展会添加一个"预览"组件,用来把 Notebook 以仪表盘形式可视化。默认情况下 Voila Preview 被放在main区域、与对应 Notebook 并排;在 Notebook 7 中可以通过修改 Notebook Shell 设置把它移到右侧:
{ "layout": { "Voila Preview": { "area": "right" } } }5.4 工具栏、菜单栏与右键菜单
除了组件摆放,工具栏、菜单栏和右键菜单的条目也可以通过设置编辑器定制:例如调整 Notebook 工具栏中按钮的顺序,或隐藏某些菜单项。仓库中的 packages/application-extension/schema/menus.json 展示了菜单条目的声明方式——每个条目可关联一个command、设置rank排序值、通过disabled: true禁用、或以separator/submenu组织菜单结构。例如其中的application:close条目就被标记为disabled: true,jp-mainmenu-view-appearance子菜单同样被禁用,这正是 Notebook 7 对 JupyterLab 默认菜单进行收敛的实例。
菜单自定义的通用做法与布局相同:在 Advanced Settings Editor 中修改对应扩展的 Schema(如@jupyterlab/apputils-extension:menus),对jupyter.lab.menus中声明的菜单树做增删改。更完整的通用界面定制说明可参考 JupyterLab 的界面定制文档(见 docs/source/configuring/interface_customization.md 中的指引)。
六、安全配置要点
由于不同组织的安全策略差异较大,官方建议在配置 Notebook 7 时与本单位安全团队协作,确定最适合自身场景的安全设置(可参见 Jupyter Server 操作者文档中的安全实践章节)。
结合本仓库源码,有几点与安全直接相关的配置值得注意:
- 令牌(token)机制:前端页面配置中会注入服务端 token(见 notebook/app.py),用于客户端鉴权;而在 JupyterHub 环境下,代码会刻意清空页面配置中的 token(notebook/app.py),避免将标识服务器的
$JUPYTERHUB_API_TOKEN泄露给浏览器; - 隐藏目录保护:
TreeHandler在展示目录前会检查路径是否为隐藏目录,若allow_hidden未开启则直接返回 404(notebook/app.py); - 认证:所有页面处理器(tree、notebooks、edit、consoles、terminals、custom CSS)都标注了
@web.authenticated,未通过认证的请求会被拒绝。
日常部署中建议在jupyter_server_config.py中显式设置c.ServerApp.token或c.ServerApp.password,并根据网络环境决定是否监听非回环地址(ip配置)。
七、小结:一份实用的配置清单
至此,围绕仓库文档 docs/source/configuration.md 的配置主题,可以归纳出一份开箱即用的操作清单:
| 目标 | 手段 |
|---|---|
| 生成默认服务端配置 | jupyter server --generate-config |
| 修改监听地址、端口、token | 编辑jupyter_server_config.py |
| 启用/禁用 Notebook 服务器扩展 | jupyter_server_config.d/*.json中的jpserver_extensions |
| 全局禁用自定义 CSS | jupyter notebook --JupyterNotebookApp.custom_css=False |
| 调整组件所在区域(左右/上下栏) | Advanced Settings Editor 修改 Notebook Shell 的layout |
| 调整工具栏/菜单条目顺序与显隐 | Advanced Settings Editor 修改菜单 Schema |
| 禁用某个前端插件 | jupyter labextension disable <extension:plugin> |
迁移旧的notebook.*服务端导入 | 参考 docs/source/migrating/server-imports.md |
理解"通用配置系统 + Jupyter Server + 前端扩展"这三大层次,就能在 Notebook 7 中游刃有余地完成从服务端调优到界面定制的全部常见需求。若想继续深入,建议依次阅读仓库中的 docs/source/configuring/config_overview.md、docs/source/configuring/interface_customization.md、docs/source/configuring/plugins.md 与 docs/source/extending/frontend_extensions.md。
【免费下载链接】notebookJupyter Interactive Notebook项目地址: https://gitcode.com/GitHub_Trending/no/notebook
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考