工作区#
JupyterLab 工作区定义了用户界面的布局和状态,例如文件、笔记本、侧边栏的位置以及面板的打开/关闭状态。
工作区可以通过三种方式管理
工作区名称只能包含 ASCII 字母(a-z 和 A-Z)、数字(0-9)、连字符(-
)和下划线(_
)。
管理工作区(GUI)#
从主菜单、侧边栏和命令面板中,有几个命令用于管理工作区
create-new、clone、rename、reset 和 delete 对服务器上 专用位置 中存储的工作区进行操作。
save、save as、import 和 export 可以将工作区加载到文件系统(包含在 Jupyter 根目录中)或从文件系统存储工作区;save 将工作区保存到最近保存的文件。
在侧边栏的“运行中的终端和内核”面板中,在“工作区”下,当前工作区有一个复选标记(✓)。单击另一个工作区将打开它。在侧边栏中,在工作区项目上打开上下文菜单(右键单击)将显示可用于管理该工作区的操作。
管理工作区(CLI)#
JupyterLab 提供了一个命令行界面用于工作区 import
和 export
$ # 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 文件,其中包含一个具有两个必需的顶级键的对象,data 和 metadata。
metadata 必须是一个映射,其中包含一个 id 键,其值与工作区的 ID 相同。这也应该是访问工作区的相对 URL 路径,例如 /lab/workspaces/foo。此外,metadata 可能包含 created 和 last_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
) 被丢弃,与之无关。