扩展#

从根本上说,JupyterLab 被设计为一个可扩展的环境。JupyterLab 扩展可以自定义或增强 JupyterLab 的任何部分。它们可以提供新的主题、文件查看器和编辑器,或为笔记本中的丰富输出提供渲染器。扩展可以向菜单或命令面板、键盘快捷键或设置系统中的设置添加项目。扩展可以为其他扩展提供 API 以供使用,并且可以依赖于其他扩展。事实上,整个 JupyterLab 本身只是一组扩展的集合,这些扩展与任何自定义扩展一样强大或特权。

有关开发扩展的信息,请参阅 开发者文档.

安装扩展#

JupyterLab 扩展包含安装到 Jupyterlab 并运行在浏览器中的 JavaScript。扩展包含一个或多个扩展 JupyterLab 的插件。首选的 JupyterLab 扩展类型是预构建扩展,因为它不需要重建 JupyterLab JavaScript 文件。

大多数 JupyterLab 扩展可以使用 Python pipconda 包安装。这些包可能还包括扩展正常运行所需的服务器端组件。

在 PyPI 上浏览扩展#

Python 包索引 (PyPI) 是 Python 编程语言软件的存储库,也是 pip 包管理器的默认包来源。虽然 简单的文本搜索 会显示数百个包,但许多 trove 分类器 可供包使用来自我描述提供的功能和兼容性

注意

这些分类器在 2021 年 8 月初被接受,它们需要一段时间才能被广泛采用。

您可以提供帮助! 向包的 setup.pysetup.cfgpyproject.toml 中提出分类器可以成为一个很棒的开源 贡献,因为此类贡献是

  • 对于来说,通常可以直接通过项目的源代码网站(例如 GitHub 或 GitLab)进行操作,

  • 维护人员可以轻松地审查和合并,并且

  • 可以对软件包的可发现性产生积极影响

使用扩展管理器管理扩展#

您可以在 JupyterLab 中使用扩展管理器来管理扩展。出于安全原因,您的系统管理员可能已禁用此功能。

注意

从 JupyterLab v4 开始,默认管理器使用 PyPI.org 作为可用扩展的来源,并使用 pip 来安装它们。

如果 Python 包具有以下分类器,则会列出扩展:Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt 此外,建议扩展作者提供 install.json 文件以指定确切的 Python 包名称。

警告

没有检查来确保扩展与当前的 JupyterLab 版本兼容。

扩展管理器位于 左侧边栏 中。

图:默认视图包含三个组件:搜索栏、“已安装”部分和“发现”部分。#

免责声明#

危险

安装扩展允许它在服务器、内核和浏览器上执行任意代码。因此,我们要求您明确承认这一点。

默认情况下,不会承认免责声明。

图:用户未承认免责声明#

由于未承认免责声明,您可以搜索扩展,但无法安装它(没有可用的安装按钮)。

要安装扩展,您首先必须明确承认免责声明。完成后,这将保留在所有会话中,用户无需再次检查它。

图:已检查免责声明#

为了便于使用,您可以折叠免责声明,以便它在屏幕上占用更少的空间。

查找扩展#

您可以使用扩展管理器查找 JupyterLab 的扩展。要自由地在当前可用的扩展中进行发现,请展开“发现”部分。这将触发对 PyPI.org 注册表上所有 JupyterLab 扩展的搜索,结果将按字母顺序列出。

或者,您可以使用搜索栏来限制您的发现。这将在 PyPI.org 注册表上对 JupyterLab 扩展进行自由文本搜索。

安装扩展#

找到您认为有趣的扩展后,单击扩展列表条目中的“安装”按钮将其安装。

危险

安装扩展允许它在服务器、内核和客户端的浏览器上执行任意代码。因此,您应该避免安装您不信任的扩展,并注意任何试图伪装成可信扩展的扩展。

新安装的扩展可能需要重新启动 JupyterLab。

管理已安装的扩展#

如果有一些已安装的扩展,它们将显示在“已安装”部分中。然后可以卸载或禁用它们。禁用扩展将阻止它被激活,但不会重建应用程序。

配置扩展管理器#

默认情况下,JupyterLab 提供了两个扩展管理器

  • pypi: [默认] 允许从 PyPI.org 卸载/安装扩展

  • readonly: 显示已安装的扩展(并能够禁用/启用它们)

您可以使用命令行选项 --LabApp.extension_manager 指定管理器;例如,要使用只读管理器

jupyter lab --LabApp.extension_manager=readonly

PyPI 管理器设置#

The pypi manager 有特定的选项,可以使用命令行选项设置。

  • --PyPIExtensionManager.base_url: PyPI 仓库基本 URL - 默认设置为 https://pypi.ac.cn/pypi.

  • --PyPIExtensionManager.rpc_request_throttling: 对 PyPI XML-RPC API 的请求之间的节流时间(以秒为单位) - 默认值为 1 秒。

  • --PyPIExtensionManager.cache_timeout: PyPI 扩展列表缓存超时时间(以秒为单位) - 默认值为 300 秒。

  • --PyPIExtensionManager.package_metadata_cache_size: 包元数据的缓存大小 - 默认值为 1500。

列表#

在扩展管理器中搜索扩展时,JupyterLab 会显示完整的搜索结果,用户可以自由安装任何源扩展。这是 默认模式.

为了提高安全性,您或您的管理员可以启用 blocklistsallowlists 模式。JupyterLab 会根据定义的列表检查扩展。

警告

一次只允许一种模式。如果您或您的服务器管理员同时配置了阻止列表和允许列表,则允许列表优先。

以下详细介绍了 阻止列表模式允许列表模式 的行为。有关启用配置列表的详细信息,请阅读 列表配置.

默认模式#

default 模式下,没有启用任何列表,搜索行为保持不变,与之前描述的行为相同。

阻止列表模式#

可以自由下载扩展,无需经过审查过程。但是,用户可以将恶意扩展添加到阻止列表中。扩展管理器将显示所有扩展,除了那些已明确添加到阻止列表中的扩展。因此,扩展管理器不允许您安装阻止列表中的扩展。

如果您或您的管理员启用了阻止列表模式,JupyterLab 将使用阻止列表,并从您的搜索结果中删除所有阻止列表中的扩展。

如果您在扩展被列入阻止列表之前安装了它,则已安装列表中的扩展条目将以红色突出显示。建议您将其卸载。您可以将鼠标移到问号图标上以阅读说明。

图: 应删除的阻止列表中的已安装扩展#

允许列表模式#

允许列表维护一组经过批准的扩展,用户可以自由搜索和安装这些扩展。扩展需要经过某种审查过程,然后才能添加到允许列表中。使用允许列表时,扩展管理器将只显示已明确添加到允许列表中的扩展。

如果您或您的管理员启用了允许列表模式,JupyterLab 将使用允许列表,并且只显示允许列表中存在的扩展。其他扩展将不会显示在搜索结果中。

如果您安装了允许列表中的扩展,并且在某个时间点该扩展从允许列表中删除,则已安装列表中的扩展条目将以红色突出显示。建议您将其卸载。您可以将鼠标移到问号图标上以阅读说明。

图: 已安装的扩展中的第二个扩展已从允许列表中删除,应将其删除#

列表配置#

您或您的管理员可以使用以下特征来定义列表加载。

  • blocked_extensions_uris: 从中获取阻止列表文件的逗号分隔的 URI 列表

  • allowed_extensions_uris: 从中获取允许列表文件的逗号分隔的 URI 列表

  • listings_refresh_seconds: 刷新列表的间隔延迟时间(以秒为单位)

  • listings_tornado_options: 用于列表 HTTP 请求的可选 kwargs

例如,要设置阻止的扩展,请使用 --LabServerApp.blocked_extensions_uris=http://example.com/blocklist.json 启动服务器,其中 http://example.com/blocklist.json 是一个 JSON 文件,如下所述。

有关 listings_tornado_options 的详细信息,请参阅 此页面(例如,您可以传递 {'request_timeout': 10} 来更改 HTTP 请求超时值)。

列表是托管在您提供的 URI 上的 json 文件。

对于每个条目,您必须定义扩展的 name,如 NPM 注册表中发布的那样。 name 属性支持正则表达式。

可选地,您还可以为您的记录添加更多字段(typereasoncreation_datelast_update_date)。这些可选字段不会在用户界面中使用。

这是一个黑名单文件示例。

{
  "blocked_extensions": [
    {
      "name": "@jupyterlab-examples/launcher",
      "type": "jupyterlab",
      "reason": "@jupyterlab-examples/launcher is blocklisted for test purpose - Do NOT take this for granted!!!",
      "creation_date": "2020-03-11T03:28:56.782Z",
      "last_update_date":  "2020-03-11T03:28:56.782Z"
    }
  ]
}

在以下允许的扩展中,@jupyterlab/* 将允许所有 jupyterlab 组织扩展。

{
  "allowed_extensions": [
    {
      "name": "@jupyterlab/*",
      "type": "jupyterlab",
      "reason": "All @jupyterlab org extensions are allowed, of course…",
      "creation_date": "2020-03-11T03:28:56.782Z",
      "last_update_date":  "2020-03-11T03:28:56.782Z"
    }
  ]
}

使用插件管理器管理插件#

每个 JupyterLab 扩展都由一个或多个插件组成。插件也由 JupyterLab 核心本身使用。

高级插件管理器允许列出和禁用单个插件,但可能已被您的系统管理员禁用。

在功能上,从插件管理器切换扩展等效于运行 jupyter labextension enablejupyter labextension disable 命令。

插件可以在 systemsys-prefix(默认)或 user 级别启用/禁用,这会影响 page_config.json 配置文件写入的位置(请参阅 jupyter --paths 结果中的 config 部分)。要更改插件管理器和默认扩展管理器的级别,请使用 PluginManager.level 特性(扩展管理器继承自插件管理器)。

锁定和解锁插件#

管理员可以使用以下方法锁定特定插件

jupyter labextension lock my-extension:plugin

要解锁已锁定的插件

jupyter labextension unlock my-extension:plugin

已锁定的插件在插件列表中显示为一个锁定图标,并且无法从用户界面中启用/禁用。

使用 jupyter labextension 管理扩展#

jupyter labextension 命令使您能够列出所有已安装的扩展,或禁用任何扩展。它还为开发人员提供帮助命令。请使用 jupyter labextension --help 查看帮助。

列出已安装的扩展#

使用以下命令列出所有已安装的扩展

jupyter labextension list

注意

jupyter labextension 通过插件命名空间(: 之前的部分)识别扩展,这可能与用于分发扩展的 pipconda 包的名称不同。

启用和禁用扩展#

禁用扩展将阻止该扩展中的所有插件在 JupyterLab 中运行(尽管代码仍然加载)。您也可以禁用特定的 JupyterLab 扩展(包括核心扩展)。

jupyter labextension disable my-extension

您可以使用以下命令启用已禁用的扩展

jupyter labextension enable my-extension

已安装的扩展默认情况下处于启用状态,除非存在明确禁用它们的配置。可以使用命令行禁用或启用扩展。扩展或扩展中的单个插件可以被另一个扩展禁用。

确定扩展是否启用或禁用的优先级顺序如下

  • 存在 <jupyter_config_path>/labconfig/page_config.json 文件,其中包含一个 disabledExtensions 键,该键是一个对象,其键为包名称,值为布尔值。

  • (已弃用) disabledExtensions 键在 <lab_app_dir>/settings/page_config.json 中的存在。此值是禁用扩展的列表,但已弃用,取而代之的是 labconfig 位置中的分层配置方法。

  • 在另一个 JupyterLab 扩展的元数据中存在 disabledExtensions 键,该键禁用给定的扩展。如果该扩展本身被禁用,则忽略该键。

使用命令行时,您可以定位配置的 --levelusersystemsys-prefix(默认值)。

一个示例 <jupyter_config_path>/labconfig/page_config.json 可能如下所示

{
   "disabledExtensions": {
         "@jupyterlab/notebook-extension": true
   }
}

有关更多信息,请参阅 LabConfig 目录文档

使用 jupyter labextension 进行安装/卸载#

注意

这种安装/卸载 JupyterLab 扩展的方式强烈不建议。

jupyter labextension 命令使您能够从 npm 安装或卸载源扩展。请参阅 jupyter labextension --help 的帮助信息。但要安装这些源扩展,您首先需要安装 Node.js。

安装 Node.js#

源扩展需要 Node.js 来重建 JupyterLab 并激活扩展。如果您使用 condaconda-forge 包,您可以使用以下命令获取 Node.js:

conda install -c conda-forge nodejs

如果您使用 conda 和默认的 Anaconda 包(即,您通常不使用 conda-forge),则应使用 conda install nodejs 从 Anaconda 默认通道安装 Node.js。

您也可以从系统包管理器获取 Node.js,或者您可以从 Node.js 网站 下载 Node.js 并直接安装。

安装和卸载源扩展#

您可以使用以下命令从 npm 安装源扩展:

jupyter labextension install my-extension my-other-extension

使用 my-extension@version 语法安装扩展的特定版本,例如

jupyter labextension install [email protected]

您还可以安装未上传到 npm 的源扩展,即 my-extension 可以是包含扩展的本地目录、压缩的 tarball 或指向压缩的 tarball 的 URL。

注意

安装源扩展将需要 安装 Node.js 并需要重建 JupyterLab。

使用以下命令卸载源扩展:

jupyter labextension uninstall my-extension my-other-extension

如果您在多个阶段安装/卸载多个扩展,您可能希望通过在安装/卸载步骤中包含标志 --no-build 来推迟重建 JupyterLab。准备重建后,您可以运行以下命令:

jupyter lab build

注意

如果您在 Windows 上重建 JupyterLab,您可能会遇到 FileNotFoundError,这是由于 Windows 上的默认路径长度所致。Node 模块存储在深度嵌套的目录结构中,因此路径可能会变得很长。如果您具有管理权限并且使用的是 Windows 10 或更高版本,则可以通过添加专门的 注册表项 来启用长路径。