工作区#

JupyterLab 工作区定义了用户界面的布局和状态,例如文件、笔记本、侧边栏的位置以及面板的打开/关闭状态。

工作区可以通过三种方式管理:

工作区名称只能包含ASCII字母(a-z和A-Z)、数字(0-9)、连字符(-)和下划线(_)。

管理工作区(图形用户界面)#

有几个命令可以从主菜单、侧边栏和命令面板中管理工作区:

  • create-new, clone, rename, reset, 和 delete 作用于存储在服务器上专用位置的工作区。

  • save, save as, import, 和 export 可以从文件系统加载和存储工作区(包含在 Jupyter 根目录中);save 会将工作区保存到最近保存的文件中。

在侧边栏的“运行终端和内核”面板中,在“工作区”下,当前工作区有一个勾号(✓)。点击另一个工作区将会打开。在侧边栏的工作区项目上打开上下文菜单(右键点击)将显示可用于管理该工作区的操作:

管理工作区 (CLI)#

JupyterLab 提供了一个命令行界面用于工作区的 importexport

$ # Exports the default JupyterLab workspace
$ jupyter lab workspaces export
{"data": {}, "metadata": {"id": "/lab"}}
$
$ # Exports the workspaces named `foo`
$ jupyter lab workspaces export foo
{"data": {}, "metadata": {"id": "/lab/workspaces/foo"}}
$
$ # Exports the workspace named `foo` into a file called `file_name.json`
$ jupyter lab workspaces export foo > file_name.json
$
$ # Imports the workspace file `file_name.json`.
$ jupyter lab workspaces import file_name.json
Saved workspace: <workspaces-directory>/labworkspacesfoo-54d5.jupyterlab-workspace

export 命令将为您提供的任何工作区生成一个URL,即使该工作区尚不存在。访问一个不存在的工作区的URL将创建一个具有该名称的新工作区。

import 功能验证工作区文件的结构,并验证工作区 metadata 中的 id 字段,以确保其 URL 与 workspaces_url 配置或 page_url 配置兼容,以验证它是否是一个正确命名的工作区,或者是默认工作区。

工作区文件格式#

工作区文件是一个JSON文件,包含一个具有两个必需顶级键的对象,datametadata

metadata 必须是一个包含 id 键的映射,该键的值必须与工作区的 ID 相同。这也应该是访问工作区的相对 URL 路径,例如 /lab/workspaces/foo。此外,metadata 可能包含 createdlast_modified 字段,分别表示创建日期和时间以及最近修改的日期和时间。日期和时间使用 ISO 8601 格式编码,例如 2022-06-15T23:41:15.818986+00:00

data 键映射到 IStateDB 的初始状态。许多插件会在状态数据库中查找配置。 此外,任何注册到 ILayoutRestorer 的插件都会在状态数据库中查找所有以它们的跟踪器的 namespace 开头的键, 直到第一个 :。这些键的值应该有一个映射的 data 属性。

例如,如果你的工作区看起来像这样:

{
  "data": {
    "application-mimedocuments:package.json:JSON": {
      "data": { "path": "package.json", "factory": "JSON" }
    }
  }
}

它将使用{ "path": "package.json", "factory": "JSON" }参数运行docmanager:open,因为application-mimedocuments跟踪器已注册到docmanager:open命令,如下所示:

const namespace = 'application-mimedocuments';
const tracker = new WidgetTracker<MimeDocument>({ namespace });
void restorer.restore(tracker, {
  command: 'docmanager:open',
  args: widget => ({
    path: widget.context.path,
    factory: Private.factoryNameProperty.get(widget)
  }),
  name: widget =>
    `${widget.context.path}:${Private.factoryNameProperty.get(widget)}`
});

请注意,数据键中第一个:之后的部分(package.json:JSON)被丢弃,且无关紧要。