- JupyterLab 应用程序由一个核心应用程序对象和一组扩展组成。
- JupyterLab 扩展是一个包含多个 JupyterLab 插件的包。
extension-template:使用 copier 创建 JupyterLab 扩展。
- 分发从源扩展预构建的包含非 JupyterLab JavaScript 依赖项的 JavaScript 代码包到例如 Python pip 或 conda 包中。
- 该代码包可以加载到 JupyterLab 中而无需重建 JupyterLab 。
- 可将预构建包直接复制到适当的目录来安装预构建扩展,从而绕过创建 Python 包的需要。
建议在 Python 包中发布预构建扩展,以方便用户。
- 应用程序插件:包括主菜单系统、文件浏览器以及笔记本、控制台和文件编辑器组件。
- Mime 渲染器插件:包括 pdf 查看器、JSON 查看器和 Vega 查看器。
- 主题插件:JupyterLab 附带浅色和深色主题插件。
应用程序插件是一个具有多个元数据字段的 JavaScript 对象。
const plugin: JupyterFrontEndPlugin<MyToken> = {
id: "my-extension:plugin", // 必需的唯一字符串。约定使用 NPM 扩展包名称:标识扩展内插件的字符串。
description: "Provides a new service.", // 可选字符串。允许记录插件的目的。
autoStart: true, // 指示插件是否应该在应用程序启动时激活。
requires: [ILabShell, ITranslator], // 对应其他插件所提供服务的令牌列表。这些服务将在插件激活时作为参数传递给 activate 函数。
optional: [ICommandPalette], // 同 requires 。
provides: MyToken, // 与插件提供给系统的服务关联的令牌。
activate: activateFunction, // 插件激活时调用的函数。参数依次为应用程序对象、与 requires 、optional 令牌对应的服务。
};
应用程序对象具有许多用于与应用程序交互的属性和方法,包括
- commands:一个可扩展的注册表,用于在应用程序中添加和执行命令。
- docRegistry:一个可扩展的注册表,包含应用程序能够读取和呈现的文档类型。
- restored:当应用程序完成加载时解析的 Promise 。
- serviceManager:用于与 Jupyter REST API 交互的低级管理器。
- shell:一个通用的 Jupyter 前端 shell 实例,它包含应用程序的用户界面。
MIME 渲染器插件是一个对象,其字段列在 rendermime-interfaces IExtension 对象中。
源扩展在其 package.json 文件的 jupyterlab 字段中具有元数据。
- extension:应用程序插件
- mimeExtension:MIME 渲染器插件
- themePath:主题路径
- schemaDir:插件设置
- disabledExtensions:禁用其他扩展
- sharedPackages:依赖项的去重
- discovery:配套包
JupyterLab 扩展必须至少设置 jupyterlab.extension 或 jupyterlab.mimeExtension 之一。
预构建扩展具有额外的 jupyterlab 元数据。
- outputDir:输出目录
- webpackConfig:自定义 webpack 配置
使用 jupyter labextension build 命令构建预构建扩展。
构成预构建扩展的文件包括
- 一个主入口点 remoteEntry..js
- 捆绑到 JavaScript 文件中的依赖项
- package.json (包含一些额外的构建元数据)
- 插件设置
- 主题目录结构(如果需要)
使用 labextension develop 命令创建指向预构建输出目录的链接,类似于 pip install -e
jupyter labextension develop . --overwrite
然后重新构建扩展并在浏览器中刷新 JupyterLab 应该会拾取预构建扩展源代码中的更改。
将其输出目录复制到 JupyterLab 可以找到的位置,通常是 /share/jupyter/labextensions/ ,其中 是 package.json 中的 JavaScript 包名称。
在编写源扩展时,可以使用命令
jlpm install # install npm package dependencies
jlpm run build # optional build step if using TypeScript, babel, etc.
jupyter labextension install # install the current directory as an extension
这会导致构建器在构建应用程序文件之前重新安装源文件夹。可以使用 jupyter lab build 重新构建,它将重新安装这些包。
可以使用 jupyter labextension link 链接正在同时处理的其他本地 npm 包,它们将被重新安装,但不会被视为扩展。本地扩展和链接的包包含在 jupyter labextension list 中。
当使用本地扩展和链接的包时,可以运行命令
jupyter lab --watch
当链接的包之一发生更改时,这将导致应用程序增量重建。如果扩展是用 TypeScript 编写的,需要运行 jlpm run build 才能使更改反映在 JupyterLab 中。为了避免此步骤,也可以监视扩展中的 TypeScript 源代码,这通常分配给 tsc -w 快捷方式。