从 Notbook 到 JupyterLab, 再配上代码帮手 Kite

又一月有半未落下一个符号了,越来越喜爱用 Python 来高效的辅助日常工作了。先前在 Shell 下使用 Python 代码,因为 Vim 可以配置 Kite 进行代码的自动完成。很早就知道 Jupyter Notebook, 但觉得它还不够漂亮,又没代码提示,也就一直没理会它,后来看到 Kite 可以支持 JupyterLab, 一启动 JupyterLab 的那一瞬间,果然比 Notebook 高大上了许多。有了 Kite  加持,写代码更是顺畅的多,当然还飞不起来。Notebook  应该是一个更经典的工具,它的一系列插件还得稍稍移植到 JupyterLab 上去才能用。

本文快速体验一下 JupyterLab, 从自身到几个基本插件的安装。本人使用的操作系统是 Mac OS X, 刚开始用 python -m venv jupyterlab-venv 创建的虚拟环境中用 pip 来安装,后来发现不知何时在我的 Python 3.8 的 bin 目录中居然安装有 jupyter 和 jupyter-lab 命令,pip install jupyterlabjupyter-lab --version 和 jupyter lab --version 显示的是不同版本

$ jupyter-lab --version
2.0.1
$ jupyter lab --version
2.2.8

进而在执行 jupyter labextension install @jupyter-widgets/jupyterlab-manager 时出错,后面再说。

所以就改成了用 conda 来建立 Python 虚拟环境安装 JupyterLab,下面是每一步的命令

JupyterLab 2.2.x 用 pip install "jupyter-kite<2.0.0" 安装, JupyterLab 3.0.x 用 pip install "jupyterlab-kite>=2.0.2"

当然我们也可以用 python -m venv jupyterlab-venv 创建的虚拟环境来做什么同样的事情,只是在创建虚拟环境后用 source jupyterlab-ven/bin/activate 进入虚拟环境,再把接下来的 conda install  换成  pip install 就是了。要让 Kite 正常工作还得下载安装 Kite。

上面命令执行完后检查版本

$ jupyter-lab --version
2.2.6

居然不是最新的 2.2.8,但它和 jupyter lab --version 显示出的版本一致,不管它了。现在可以用 jupyter-labjupyter lab 来启动了,启动后会自动打开默认的浏览器,或者从控制台找到带 ?token=abc...  的 URL 在任何浏览器中打开

(jupyterlab-venv) $ jupyter-lab
[I 20:32:19.928 LabApp] JupyterLab extension loaded from /usr/local/Caskroom/miniconda/base/envs/jupyterlab/lib/python3.8/site-packages/jupyterlab
[I 20:32:19.929 LabApp] JupyterLab application directory is /usr/local/Caskroom/miniconda/base/envs/jupyterlab/share/jupyter/lab
[I 20:32:19.932 LabApp] Serving notebooks from local directory: /Users/yanbin/Workspaces/test
[I 20:32:19.932 LabApp] Jupyter Notebook 6.1.4 is running at:
[I 20:32:19.932 LabApp] http://localhost:8888/?token=ecfc05c8bfa2b73017a6eae8cdad22a1a9c2727118158193
[I 20:32:19.932 LabApp] or http://127.0.0.1:8888/?token=ecfc05c8bfa2b73017a6eae8cdad22a1a9c2727118158193
[I 20:32:19.932 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 20:32:19.938 LabApp]
To access the notebook, open this file in a browser:
file:///Users/yanbin/Library/Jupyter/runtime/nbserver-2751-open.html
Or copy and paste one of these URLs:
http://localhost:8888/?token=ecfc05c8bfa2b73017a6eae8cdad22a1a9c2727118158193
or http://127.0.0.1:8888/?token=ecfc05c8bfa2b73017a6eae8cdad22a1a9c2727118158193

首先看到的是一个启动界面,是不是更像是一个 IDE 了,而不是类似于 Notebook 一进来分明是一个文件浏览器的样子。

JupyterLab 内置支持除 Diagram 以外的类型, Diagram 是自己安装的 jupyterlab-drawio, JupyterLab 支持 Markdown, 还能显示 csv 来表格。现在开始创建一个 Python 3 Notebook, 更名为 test, 尝试一下用 pandas 和  ipywidgets, 并体验 Kite 带给  JupyterLab  的自动完成功能,尽量用一张图展示出 JupyterLab 的主要功能

 

在右方的空格视图中,左上角使用 panda, numpy 显示显示 DataFrame 为表格,右上边是用 Diagram 画图,左下用 ipywidgets 创建一个按钮,点击后打印 "you clicked me", 并输入 btn. 出现自动代码提示。注意到左下边有个风筝图样并 Kite:ready, 说明 Kite 自动完成功能正在工作,这让 JupyterLab 更具 IDE 的特性。

JupyterLab 大概的模样就是这样了,其他的就是扩展更多语言的支持,譬如 Ruby, Java, Scala, Groovy, R, Spark, C 等等。

这里列出一些 JupyterLab 显著优于 Notebook 的功能:

  1. 多个文件窗口能并排或上下显示,或任意布局
  2. 单元可随意拖拽排列; 随时启动新的终端窗口
  3. 多样的界面主题
  4. 组件库的参考链接
  5. 如果厌倦了 JupyterLab 还能从 Help 菜单中选择 Launch Classic Notebook 回到经典的 Notebook 界面, 相信你不会的,还有什么理由不对 JupyterLab 爱不释手呢

JupyterLab 自己还有一个扩展市场,不必总是用命令来安装扩展,可直接从界面来查找安装,点击左边条扩展管理按钮

安装过程中曾碰过的几个问题

一个前边提到过的,运行 jupyter labextension install @jupyter-widgets/jupyterlab-manager 后报错

Failed to fetch package metadata for '@jupyter-widgets/jupyterlab-manager': URLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)'))
Failed to fetch package metadata for '@jupyter-widgets/jupyterlab-manager': URLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)'))
Failed to fetch package metadata for '@jupyter-widgets/jupyterlab-manager': URLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)'))
An error occured.
ValueError: No version of @jupyter-widgets/jupyterlab-manager could be found that is compatible with the current version of JupyterLab.
 
Conflicting Dependencies:
JupyterLab                        Extension      Package
>=2.2.5 <2.3.0                    >=3.0.0-rc.4 <4.0.0@jupyterlab/application
>=2.2.6 <2.3.0                    >=3.0.0-rc.4 <4.0.0@jupyterlab/notebook
>=2.2.3 <2.3.0                    >=3.0.0-rc.4 <4.0.0@jupyterlab/rendermime
>=2.2.0 <2.3.0                    >=3.0.0-rc.4 <4.0.0@jupyterlab/rendermime-interfaces
>=5.2.4 <5.3.0                    >=6.0.0-rc.4 <7.0.0@jupyterlab/services
See the log file for details:  /var/folders/xz/vqv039517flcxtqzrq_jjy1xqzfzc0/T/jupyterlab-debug-wawa7ygu.log
查看 /var/folders/xz/vqv039517flcxtqzrq_jjy1xqzfzc0/T/jupyterlab-debug-wawa7ygu.log 会得到更详细的信息。我的原因是 jupyter-lab --version 显示的版本为 2.0.1,不能安装较新的 jupyter-widgets-jupyterlab-manager-3.0.0-alpha.2, 需指定更低的版本安装,命令为 jupyter labextension install @jupyter-widgets/jupyterlab-manager@2
 
有时候可用 jupyter lab clean 和 jupyter lab build 作清理工作。
 
[2022-01-08] jupyter-lab 的启动:jupyter-lab --no-browser --ip=192.168.86.115 --notebook-dir=notebook --allow-root
 
其他资源:
  1. 好用到飞起的12个jupyter lab插件
    我可不喜欢这样的标题,不过有几个插件还是值得拥有,比如 debugger 插件: 能让你在 JupyterLab 中打断点进行单步调试了; jupyter-matplotlib: 交互式作图; jupyterlab-execute-time: 记录每个单元格执行的时间
  2. 利器|JupyterLab 数据分析必备IDE完全指南
    如果你首先看了这篇的话,最好是没读过本文的内容, 因为我写的笔记总会是杂乱无章
  3. awesome-jupyterlab-extension
  4. BeakerX
    给 Jupyter Notebook 增加对 Groovy, Scala, Clojure, Kotlin, Java, SQL, 以及更多特性的支持, 要在 JupyterLab 中用它也得花得功夫研究一下

本文链接 https://yanbin.blog/from-notbook-to-jupyterlab-with-kite/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。