添加扩展#

JupyterLite 重新使用与 JupyterLab 3.0+ 中相同的预构建扩展系统。预构建扩展有时也称为联合扩展。在 JupyterLab 中,它们可以通过 pipconda 安装,而无需重建整个 JupyterLab 应用程序。

默认情况下,JupyterLite 附带的所有应用程序都是使用 JupyterLab 组件构建的。这使得大多数现有的第三方 JupyterLab 扩展也能与 JupyterLite 一起使用。

从环境中添加新扩展#

创建一个新环境#

添加新扩展的最简单方法是在已经安装了扩展的 Python 环境中使用 JupyterLite CLI。

您可以选择您喜欢的工具来管理这些依赖项,例如 pipcondamamba。对于 condamamba,它们通常在 environment.yml 中定义,而对于 pip,则在 requirements.txt 中定义。

如果您想在本地机器上构建 JupyterLite 网站,最好先创建一个新环境。

这可以使用 venv 模块完成

python -m venv .
source bin/activate

或者使用 conda / mamba

mamba create -n my-jupyterlite-deployment -c conda-forge python -y
mamba activate my-jupyterlite-deployment

在环境中安装扩展#

例如,让我们使用以下 requirements.txt

jupyterlab-tour
jupyterlab-night

此文件定义了两个扩展,其中一个是主题。运行以下命令安装它们

python -m pip install -r requirements.txt

如果你已经安装了 jupyterlab,你可以使用以下命令验证它们是否已正确安装

jupyter labextension list

这应该返回类似于以下内容的结果

JupyterLab v4.*.*
PREFIX/share/jupyter/labextensions
        jupyterlab-tour  v4.0.1 enabled OK
        jupyterlab-night v0.4.0 enabled OK

构建 JupyterLite 网站#

现在我们需要生成包含这些扩展的 JupyterLite 存档。可以使用以下命令完成此操作

jupyter lite build

当你运行 jupyter lite build 时,JupyterLab 环境中的所有预构建扩展,例如 {sys.prefix}/share/jupyter/labextensions 将被

  • 复制到 {output-dir}/extensions

  • 并将它们的主题信息复制到 {output-dir}/{app/?}theme/

Jupyter Widgets 和自定义渲染器的案例#

一些扩展,例如 Jupyter Widgets 和自定义渲染器,还需要在运行时安装 Python 包,以便在使用笔记本时工作。例如,ipyleafletbqplotplotly 就是这种情况。

要安装前端扩展,只需将其添加到需求列表中。例如,从上面定义的 requirements.txt 文件继续

jupyterlab-tour
jupyterlab-night
ipywidgets
bqplot
plotly

你的 JupyterLite 实例的最终用户仍然需要在运行时使用与 IPython 兼容的 %pip 魔法命令在他们的笔记本中安装这些依赖项

%pip install -q ipywidgets bqplot plotly

这转化为

import piplite
await piplite.install(["ipywidgets", "bqplot", "plotly"])

避免前端扩展和 Python 包之间的版本漂移#

在某些情况下,使用 %pip installpiplite.install 在运行时安装的包的版本可能不再与已部署的前端扩展兼容。例如,当 JupyterLite 网站在几周前构建并部署时,而 Python 包的新版本已经发布,就会发生这种情况。在这种情况下,前端扩展不会更新,因为它们仍然作为部署的一部分以静态文件的形式提供。

避免这种不匹配的一种方法是更明确地固定依赖项。例如

ipywidgets==7.7.0
bqplot==0.12.30
plotly==5.8.0

笔记本中的用户界面代码也必须使用相同的版本才能保持兼容

%pip install -q "ipywidgets==7.7.0" "bqplot==0.12.30" "plotly==5.8.0"

这转化为

import piplite
await piplite.install(["ipywidgets==7.7.0", "bqplot==0.12.30", "plotly==5.8.0"])

不幸的是,这有点脆弱,但目前可以完成工作。在 JupyterLite 的未来版本中,这可能会得到改进。

如果你想对你的依赖项有更多控制,请查看 配置 piplite URL 的指南

如何知道扩展是否与 JupyterLite 兼容?#

对于可能有效的扩展,一个好的起点是 JupyterLab 问题 扩展与 3.0 的兼容性 (#9461)。此外,本网站演示了一些 扩展

高级扩展配置#

如果你正在寻找更多配置扩展的选项,请查看关于 高级扩展配置 的专用指南。