常见问题 (FAQ)#

以下是一些常见问题。单击问题将被引导到我们文档或 GitHub 存储库中的相关信息。

一般#

用法#

Notebook#

我的 Notebook 在 iframe 中显示单元格输出。来回滚动时它们会被重置。

自 JupyterLab v4 以来,Notebook 渲染经过优化,只显示所需的单元格。这会与 iframes 产生副作用。

当前的解决方案是将设置 Notebook => Windowing mode 设置为 defernone。这会严重影响 JupyterLab 在打开长 Notebook 和/或大量文件时的性能。

我的 Notebook 注入了自定义 CSS,导致了意外的滚动问题(例如,无法滚动到活动单元格)。

自 JupyterLab v4 以来,Notebook 渲染经过优化,只显示所需的单元格。它不支持更改元素 CSS margin(特别是对于单元格)。

解决方法是优先注入自定义 padding 而不是 margin。如果您无法避免更改边距,可以将设置 Notebook => Windowing mode 设置为 defernone。这会严重影响 JupyterLab 在打开长 Notebook 和/或大量文件时的性能。

属性清理#

为什么 Markdown 中的 idname 属性被删除了?

JupyterLab 清理这些属性是为了防止像 DOM 劫持攻击这样的安全风险。有关更多详细信息,请参阅 DOM 劫持防范指南。此外,请参阅相关的安全公告 CVE-2024-43805

解决方法: - 在 Markdown 单元格中使用标题来安全地创建锚点。 - (可选)在 Settings -> Settings Editor -> Sanitizer 中启用“Allow named properties”设置(不建议用于不受信任的来源)。

Jupyterlab 如何处理锚点导航?

在清理过程中,DOM 元素的 id 属性被替换为 data-jupyter-id 属性。当解析 URL 时,如果存在片段(例如 #my-id),它将找到并滚动到具有相应 data-jupyter-id 的元素。

提示和技巧#

  • 如何每次都用一个干净的工作区启动 JupyterLab?

c.ServerApp.default_url = '/lab?reset' 添加到您的 jupyter_server_config.py 中。有关更多信息,请参阅 如何创建 jupyter_server_config.py

开发#

  • 如何贡献?

  • 如何扩展或定制 JupyterLab?

  • 在经典的 Notebook 中,我可以使用单元格输出的自定义 Javascript 来程序化控制 Notebook。在 JupyterLab 中我能做同样的事情吗?

    JupyterLab 的构建旨在支持广泛的可扩展性,包括基于 Notebook 输出的动态行为。要访问此可扩展性,您应该编写一个自定义 JupyterLab 扩展。如果您想响应用户在 Notebook 中执行某些代码而触发某些行为,您可以输出自定义 mimetype (MIME 渲染器插件)。我们目前不允许从 Javascript 渲染器访问 JupyterLab API,因为这会将内核和 Notebook 输出与 JupyterLab 绑定,并使其难以被其他前端支持。有关更多讨论和潜在的替代解决方案,请参阅问题 #4623#5789

每夜版本#

JupyterLab 项目不会向 PyPI 发布每夜版本。

但是 JupyterLab 在 CI 上为 main 分支上的每次提交构建,并生成 wheel 和源分发作为 GitHub Actions 工件。这些工件可以下载并在本地安装。

main 上最新提交下载 JupyterLab wheel

  • 前往 检查发布 GitHub Action 页面

  • 点击其中一个工作流运行

  • 在“Artifacts”部分下,点击 jupyterlab-releaser-dist-<build-number> 下载存档

  • 在本地,解压存档

  • 使用 python -m pip install ./jupyterlab-x.y.z.whl 安装

注意

下载工件需要登录 GitHub。

OS X 特定问题#

按住按钮不会产生重复的按键事件#

OS X 的最新版本改变了按住按钮的默认行为:不是重复按键,而是出现字符重音弹出窗口。例如,在编辑器中处于 vim 模式时,按住任何导航键 h j k l 不会导致像在桌面终端应用程序中通常那样的重复移动。

全局更改此行为(包括 Safari、Firefox 和 Google Chrome 等浏览器),请在终端中输入以下命令,然后注销并重新登录

defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false

要将此行为更改回标准,请使用以下命令,然后注销并重新登录

defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool true