JupyterLab 插件开发:常见问题汇总

JupyterLab Extension (插件开发)

    • 开发环境篇
      • 1. 安装 Miniconda
      • 2. 搭建虚拟环境
      • 3. 项目运行指令
      • 4. 代码实时更新
    • 运行报错篇
      • 1. Windows 编码问题
      • 2.项目依赖无法下载

近期接手了开发 Jupyterlab Extension的任务,将开发过程中遇到的常见的问题进行记录,以便于后续的的复习及总结。

开发环境篇

1. 安装 Miniconda

期望有一个工具能够帮助我运行 Jupyterlab。在此推荐使用 Miniconda。

官网下载:Miniconda

根据自己的设备型号选择合适的下载包。

注意:

在安装时,务必选中将 Miniconda 注入环境变量的选项,否则很容易导致运行项目时无法 识别 conda 指令。
JupyterLab 插件开发:常见问题汇总_第1张图片

2. 搭建虚拟环境

安装完成后,需要给待开发的插件搭建一个虚拟环境。

可以运行如下指令,创建一个名字为jupyterlab-env的虚拟环境。

 conda create -n jupyterlab-env --override-channels --strict-channel-priority -c conda-forge -c anaconda jupyterlab nodejs
 // 默认搭建的环境,使用的 jupyterlab 和 nodejs 都是最新的版本
 // 如果需要指定 jupyterlab 或者 nodejs 的版本,可以这样指定
 // jupyterlab=2.3.0   
 // nodejs=14.15.1

然后激活该虚拟环境,就可以将我们正在开发中的插件添加到虚拟环境中了。

// 激活虚拟环境
conda activate jupyterlab-env
// 退出虚拟环境
deactivate

为什么需要虚拟环境?

因为如果不创建虚拟环境,那我们为 Jupyterlab 安装了其他插件,会与正在开发的混在一起,不利于开发。虚拟环境起到了隔离的作用。

3. 项目运行指令

运行开发中的 Jupyterlab 插件,常常用到如下指令

npm install
npm run build
jupyter labextension install .
jupyter lab
// 如果代码做了更改,需要再次执行
 npm run build
 jupyter labextension install .
 jupyter lab

当我们修改了代码时,期望页面做出修改后的改变,有两种方法:

一种是打断运行中的 Jupyter lab 命令,重新执行命令。

一种是无需修改 Miniconda 中的内容,等待页面出现 Build 的弹窗,点击 Build 后等待一段时间。出现 Reload 的弹窗后,点击 Reload 即可。

4. 代码实时更新

上述的更新页面的方法,显然不够敏捷,不能满足高速开发的需求。于是我寻找一种可以像 webpack 自动更新那样的开发方式。

在此记录一个不是很成熟的 Jupyterlab 实时更新的方法。

开一个 Miniconda 的终端,执行 npm run watch,该终端会监测代码的变化并及时构建新的代码。
然后开另外一个 Miniconda 的终端,执行jupyter lab --watch,该终端会在代码发生变化后,重新运行 Jupyterlab。

这样就实现了代码修改后,实时查看修改结果的目的。

缺点也是有的,Juyterlab 的 watch 功能,反应并不很敏捷,通常需要等待 1min 才能看到页面的变化。

运行报错篇

1. Windows 编码问题

UnicodeDecodeError: ‘charmap’ codec can’t decode byte 0x8d in position
240: character maps to

这个是在 运行 jupyter lab 命令时出现的,我的电脑时 Windows 系统,会出现该问题 (经沟通,同事的 Mac 并未存在此问题)。需要增加中文编码

解决方法:

如果是虚拟环境中出现的,找到 Miniconda 的安装路径

安装路径miniconda3\envs\jupyterlab-env(虚拟环境)\Lib\site-packages\jupyterlab\commands.py

如果是 base 环境

安装路径miniconda3\Lib\site-packages\jupyterlab\commands.py

修改该文件的 83 行

self.proc = self._create_process(
    cwd=cwd,
    env=env,
    stderr=subprocess.STDOUT,
    stdout=subprocess.PIPE,
    universal_newlines=True,
    encoding="UTF-8"  // 增加编码格式
)

2.项目依赖无法下载

Jupyter Labs: “RuntimeError: npm dependencies failed to install” When
Building

该问题有三种尝试解决的方案

  1. 公司的网络问题,或许是公司的防火墙拦截导致依赖项无法下载
  2. nodejs 的版本问题,重新安装 conda install nodejs
  3. 依赖项版本冲突导致无法下载,可以 rm package.lock.json

后续遇到其他问题,会陆续补充完善。

如有小伙伴也正在开发 Jupyterlab 的插件,欢迎留言,一起讨论,一起学习~

你可能感兴趣的:(Jupyterlab,Extension,Jupyterlab,插件开发,机器学习,前端)