JupyterLab使用教程

  • 一、Jupyter简介
    • 1. 用户接口
    • 2. 架构原理
      • 1)IPython Kernel
      • 2)Jupyter Notebook接口
      • 3)Notebook导出为其它格式
      • 4)Projects overview
  • 二、JupyterLab安装和基本使用
    • 1. 安装
    • 2. 界面初识
      • cell的三种类型
      • notebook支持两种模式
      • 菜单
    • 3. 工作目录、Notebook文件
      • 工作目录
      • Notebook文件
    • 4. 在jupyter中使用shell命令
  • 三、快捷键
    • 1. 通用快捷键(两种模式通用)
    • 2. 命令行模式(按 Esc 生效)快捷键
    • 3. 编辑模式(按 Enter 生效)快捷键
    • 4. 自己动手设置快捷键
  • 四、魔法命令
    • 1. 查看魔法命令
    • 2. 行魔法命令
    • 3. 单元魔法命令
  • 五、扩展组件
    • 1. 准备工作
    • 2. 插件的安装
    • 3. 常用插件
  • 六、远程访问
    • 1. 生成配置文件
    • 2. 生成访问密码
    • 3. 修改配置文件
    • 4. 启动JupyterLab服务为后台进程

一、Jupyter简介

Jupyter源于Ipython Notebook项目,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具,对Python的愈加流行和在AI领域的领导地位有很大的推动作用。

Jupyter目前支持超过40种编程语言,包括 Python, R, Julia, and Scala等。

1. 用户接口

  • JupyterLab

    最新的基于web的交互式开发环境,适用于notebook、code和data。其灵活的界面允许用户配置和设计数据科学、科学计算、计算新闻和机器学习领域的工作流。模块化设计可以轻松的实现更多扩展功能。

    本文主要讲解Jupyterlab的基本使用。

    • 安装:pip install jupyterlab
    • 启用:jupyter lab
  • Jupyter Notebook

    上一代的基于 Web 的交互式开发环境,其功能在JupyterLab中已经包含,建议使用JupyterLab。

    • 安装:pip install jupyter
    • 启用:jupyter notebook
  • nbclassic

    NBClassic 将基于 Jupyter Server运行Jupyter Notebook。

    这个项目为JupyterLab和其他前端切换到Jupyter服务器作为Python Web应用程序后端做准备。使用这个包,用户可以在新的Python服务器后端上并排启动Jupyter Notebook、JupyterLab和其他前端。

    • 安装:pip install nbclassic
    • 启用:jupyter nbclassic
  • Jupyter Console

    控制台前端

    • 安装 :pip install jupyter-console
    • 启用:jupyter console
  • Qt console

    Qt控制台是一个非常轻量级的应用程序,在很大程度上感觉像一个终端,但它提供了一些只有在GUI中才可能实现的增强功能,例如内联图形、带有语法高亮显示的多行编辑、图形化调用提示等等。Qt控制台可以使用任何Jupyter内核。

    • 安装:pip install qtconsole
    • 启用:jupyter qtconsole
  • Voilà

    Voilá允许你将Jupyter笔记本转换成一个交互式仪表板,让你可以与他人分享你的工作。

    • 安装:pip install voila
    • 启用:voila

2. 架构原理

1)IPython Kernel

所有其他接口(包括Notebook、Qt控制台、ipython控制台和第三方接口)都使用IPython Kernel。IPython Kernel是一个独立的进程,负责运行用户代码,以及计算可能的完成情况。前端(如Notebook或Qt控制台)通过使用ZeroMQ套接字发送的JSON消息与IPython内核进行通信;前端和IPython内核之间使用的协议在Jupyter中的消息传递中进行了描述。

这种设计的目的是允许基于同一内核轻松开发不同的前端,同时,也可以通过开发新的内核来支持新的编程语言。目前有两种方法可以为另一种语言开发内核:

  • Wrapper Kernel,重用IPython的通信机制,只实现核心执行部分
  • Native Kernel,采用目标语言实现执行和通信

2)Jupyter Notebook接口

Jupyter Notebooks是包含了代码、元数据、内容和输出的结构化数据。当保存到磁盘时,文件扩展名为.ipynb,并使用JSON结构。有关notebook格式结构和规范的更多信息,请参阅nbformat文档。

  • Notebook server:不是内核,它主要负责保存和加载notebook,所以你可以编辑notebook,即使你没有该语言的内核(当然也无法运行代码)。

  • Kernel:对notebook文档一无所知:当用户运行它们时,它只接收要执行的代码单元。

3)Notebook导出为其它格式

使用工具 Nbconvert 将notebook文件导出为其他格式,比如HTML, LaTeX, 或者reStructuredText等。转换过程如下:

  • Preprocessors:在内存中修改notebook。比如:ExecutePreprocessor运行notebook中的代码并更新输出

  • Exporter: 转换notebook为其他格式。

  • Postprocessors:处理导出的文件。

4)Projects overview

下面是截至2017年的项目关系的图:

二、JupyterLab安装和基本使用

Jupyter lab是Jupyter的下一代基于Web的交互式开发环境,是 Jupyter Notebook的升级版。

1. 安装

在安装JupyterLab之前,需要安装Python环境:

  • 第一种选择,安装Python官方的发行版
  • 第二种选择,安装Anaconda发行版本,建议在安装Python环境时首选Anaconda。

如果安装的Anaconda发行版,该版本已经包含了JupyterLab,所以不需要再另外安装,否则按如下命令进行安装。

# 安装前先升级下pippython -m pip install --upgrade pip# 开始下载安装pippip install jupyterlab# 如果已经安装过JupyterLab,可以使用下面的命令更新到新版本pip install --upgrade jupyterlab

安装好后,启动JupyterLab

jupyter lab

默认情况下,启动成功后,会自动打开浏览器进入JupyterWeb界面(建议将Chrome、Edge或者firefox浏览器设为默认浏览器,不要使用IE浏览器),如果看到2中的界面,表示成功了。

2. 界面初识

当点击左边栏的文件浏览(File Browser)按钮,可以查看到notebook的root目录下的文件,上面有添加文件和文件夹、上传文件、刷新文件列表等按钮。

右边是notebook的工作区域, 整个notebook由单元格(cell)组成,以工作区域的上面有notebook的保存、单元的添加、删除、运行、单元类型切换等按钮。

cell的三种类型

  • Code:编辑代码,运行后显示代码运行结果
  • Markdown:编写Markdown文档,运行后输出Markdown格式的文档)
  • Raw:普通文本,运行不会输出结果

notebook支持两种模式

该方式起源于vim编辑器。

  • 编辑模式:
    • 进入方式:命令模式下按Enter键或者鼠标点击Cell的编辑框进入编辑状态
    • 主要操作:可以操作代码或文本的编辑、剪切、复制 、粘贴等操作
  • 命令模式
    • 进入方式:Esc键或者鼠标点击Cell编辑框前方的空白区域进入命令模式。
    • 主要操作:可以操作cell单元本身,比如进入单元的删除、添加、剪切、复制 、粘贴、移动等操作

菜单

  • 文件(File):与文件和目录有关的操作
  • 编辑(Edit):与编辑文档和其他活动有关的动作
  • 视图(View):视图相关操作
  • 运行(Run):用于在不同活动(例如笔记本和代码控制台)中运行代码的动作,可运行选中单元,也可以运行所有单元
  • 内核(Kenel):内核的起、停、切换等相关操作
  • 标签(Tabs):停靠面板中打开的文档和活动的列表
  • 设置(Settings):常用设置和高级设置编辑器
  • 帮助(Help):JupyterLab和内核帮助链接的列表。

3. 工作目录、Notebook文件

工作目录

  • 由启动jupyterLab的启动参数--notebook-dir指定

    jupyter lab --notebook-dir="E:/Projects"
  • 如果没有指定参数--notebook-dir,则由配置文件中的参数c.ServerApp.root_dir指定

    配置文件可以通过下面命令生成(可参考第五部分内容进行设置):

    jupyter lab --generate-config
  • 如果配置文件中也没有指定,工作目录由启动JupyterLab时的当前路径决定。

Notebook文件

Notebooks是包含了代码、元数据、内容和输出的结构化数据。当保存到磁盘时,文件扩展名为.ipynb(存储在工作目录下的某个子目录中),并使用JSON结构。

文件名的修改可以在文件系统中修改,也可以在Web界面右键进行修改

4. 在jupyter中使用shell命令

当你正在使用Python编译器,需要用到命令行工具的时候,麻烦的事情就出现了:要在shell和IDLE之间进行切换。

但是,如果你用的是Jupyter,就完全不用这么麻烦,你可以直接在命令之前加一个!,就能执行shell命令,完全不用来回切换,就能在Jupyter中执行任何命令。

下面是在windows系统中,使用命令dir查看当前目前的文件内容

比如我们需要使用pip安装包的时候,便可以直接在JupyterLab的某个文档的单元中运行!pip install xxxx即可。

三、快捷键

快捷键可以干嘛,它不仅可以大大提高开发效率,还可以用来装X,正所谓一顿操作猛如虎。

不管你是奔着什么目的,都有必要掌握常用的快捷方式,下面按不同的模式列出了基本的快捷方式,并在自己经常使用的快捷方式前加*注明。

1. 通用快捷键(两种模式通用)

*Shift-Enter : 运行本单元,选中下个单元*Ctrl-Enter : 运行本单元*Alt-Enter : 运行本单元,在其下插入新单元*Ctrl-S: 保存并检查

2. 命令行模式(按 Esc 生效)快捷键

*Enter: 进入编辑模式*Y : 单元格转入代码状态*M :单元格转入markdown状态R : 单元格转入raw状态1 : 设定 1 级标题2 : 设定 2 级标题3 : 设定 3 级标题4 : 设定 4 级标题5 : 设定 5 级标题6 : 设定 6 级标题*A: 在上面插入单元格*B: 在下面插入单元格*X: 剪切选择的单元格*C: 复制选择的单元格*V: 粘贴到下面*Z: 撤销单元格操作*D,D: 删除选中单元格K: 选择上面的单元格↑: 选择上面的单元格↓: 选择下面的单元格J: 选择下面的单元格Shift-K: 扩展上面选择的单元格Shift-↑: 扩展上面选择的单元格Shift-↓: 扩展下面选择的单元格Shift-J: 扩展下面选择的单元格Ctrl-A: 选择所有的单元格*Shift-M: 合并选中单元格, 如果只有一个单元格被选中,合并下方的单元格S: 保存并检查I,I: 中断服务0,0: 重启服务(带窗口)Shift-L: 在所有单元格中切换行号,并保持设置*Shift-空格: 向上滚动*空格: 向下滚动Ctrl+Shift+[: 向左切换文档Ctrl+Shift+]:向右切换文档

3. 编辑模式(按 Enter 生效)快捷键

Ctrl-M: 进入命令行模式*Esc: 进入命令行模式*Tab : 代码补全或缩进*Shift-Tab : 提示或解除缩进Ctrl-] : 缩进Ctrl-[ : 解除缩进Ctrl-A : 全选*Ctrl-Z : 撤销*Ctrl-Shift-Z : 重做Ctrl-Y : 重做Ctrl-Home : 跳到单元开头Ctrl-End : 跳到单元末尾Ctrl-Left : 跳到单词左边Ctrl-Right : 跳到单词右边Ctrl-Backspace: 删除前面的单词Ctrl-Delete: 删除后面的单词*Ctrl-Shift-- : 分割单元*Ctrl-/: 注释或解除注释*Ctrl-D: 删除整行Ctrl-U: 撤销选择Alt-U: 重新选择Insert: 切换重写标志↓: 光标下移↑: 光标上移

4. 自己动手设置快捷键

四、魔法命令

并且都以%符号作为前缀

IPython魔法命令设计用于简洁地解决标准数据分析中的各种常见问题。魔法命令有两种形式:

  • 行魔法(line magic):以单个%字符作为前缀,作用于单行输入
  • 单元魔法(cell magic):以两个%%作为前缀,作用于多行输入。

1. 查看魔法命令

%magic: 输出所有魔法指令帮助文档%lsmagic:列出所有magics命令 %quickref:输出所有魔法指令的简单版帮助文档%MagicName?:输出某个魔法命令详细帮助文档 

查看魔法命令简单版的帮助文档

查看time魔法命令的使用帮助文档

2. 行魔法命令

这里只列出一些常用的行魔法命令:

  • %automagic:如果automagic被打开,魔法命令可以省略前面的% 符号

  • %run:执行脚本

%run test.py

  • %time:计算接下来一行的Python语句的执行时间

  • %timeit:计算接下来一行的Python语句多次执行后的平均时间

%timeit L = [n ** 2 for n in range(100000)]

  • %history:获取此前所有的输入历史

  • %xmode:设置异常模式,即当代码有异常时,出错信息的输出方式,可以设置Plain、Context、Verbose和Minimal四种模式

  • %pip:在cell中使用pip指令

  • shell相关魔法命令

    • %cd%cat%cp%env%ls%man%mkdir%more%mv%pwd%rm%rmdir、…

注意:魔法方法提供了部分shell命令的功能,另外,我们也可以通过!cmd的方式运行相关shell命令。但要注意它们的区别:

  • !开一个新的progress,执行完之后立即终止。如果执行的命令是切换目录,则不会对当前进程产生影响。
  • %的操作会持续。如果使用%cd切换目录后,直接影响是当前进程。

3. 单元魔法命令

  • %%time:处理多行输入

  • %%timeit:处理多行输入

%%timeitL = [n ** 2 for n in range(100000)]L = [n ** 2 for n in range(100000)]

  • %%writefile:将当前cell中内容写入文件中
%%writefile test.pyprint('hello world!')

  • %%latex:写Latex公式
%%latex\begin{equation}\int_0^\infty \frac{x^3}{e^x-1}\,dx = \frac{\pi^4}{15}\label{eq:sample}\end{equation}

  • %%script :写bash、perl、javascript、js 等命令

五、扩展组件

Jupyter让很多人喜欢的原因在于它提供了丰富的插件,包括显示代码执行时间、生成目录、显示变量名、代码块折叠等各种让你舒适的功能。

1. 准备工作

在进行JupyterLab插件安装之前,需要安装node.js 和 npm,可运行如下命令进行安装。

!pip install nodejs npm -i https://pypi.tuna.tsinghua.edu.cn/simple

注意,命令前面加!是因为在jupyterlab中运行的,如果在终端运行的安装命令,去掉!

2. 插件的安装

进入JupyterLab后,可以在Web上查看已安装组件,搜索安装需要的插件

注意:如果没有出现插件选项卡,可以通过 setting–>Advanced Settings Editor–Extension Manager :在User Overrides 添加语句{“enabled”: true},最后保存,就可以出现插件选项

当然,你也可以使用命令行方式进行插件的查看、安装、更新和删除

查看已安装插件:jupyter labextension list

更新已安装插件:jupyter labextension update --all

安装插件toc:jupyter labextension install @jupyterlab/toc

删除插件toc:jupyter labextension uninstall @jupyterlab/toc

3. 常用插件

  • go to definition: 在Lab笔记本和文件编辑器中跳转到变量或函数的定义。

  • lsp:自动补全、参数建议、函数文档查询、跳转定义等

    • 安装:

      pip install jupyterlab_sqljupyter serverextension enable jupyterlab_sql --py --sys-prefixjupyter lab build

      或者在Web的插件选项中搜索安装

  • sql: 可以在Lab中连接数据库,并进行sql查询和修改操作

  • drawio:非常棒的流程图工具

    • 安装:pip install jupyterlab-drawio或者在Web的插件选项中搜索安装

  • spreadsheet:在Lab上显示excel表格(只读模式)

  • gather: 在Lab中清理代码,恢复丢失的代码以及比较代码版本的工具

  • github: 安装后Lab左侧会出现一个github栏按钮,你可以在里面搜索github项目,并且打开项目里面的文件,如果是notebook文件,能够直接运行代码

  • toc: 方便地在Lab上展示notebook或者markdown的目录

  • LaTeX:编辑并预览LaTeX文档

  • HTML: Lab内部呈现HTML文件

  • plotly(https://github.com/jupyterlab/jupyter-renderers): 展示plotly可视化效果

  • bokeh: 展示bokeh可视化效果

  • variableinspector: 在Lab中展示代码中的变量及其属性,类似RStudio中的变量检查器

  • matplotlib:启用matplotlib可视化交互功能

  • dash: 展示plotly dash交互式面板

  • monitor: 系统监视器是用于显示系统信息(内存和 cpu 使用情况)的 JupyterLab 扩展。它用于监视自己的资源使用情况。

六、远程访问

如果你有一台云服务器,是不是很想在服务器上配置好环境,在任何地方都可以通过浏览器进行访问使用呢?

考虑到服务器一般使用Linux,这里将以ubuntu为例,介绍如何配置远程访问方式,前提是服务器上已经安装好了JupyterLab。(如果是windows,亦是如此操作):

1. 生成配置文件

jupyter lab --generate-config

运行上面的命令后,会生成jupyter的配置文件,比如这里生成的配置文件为:/home/xiaobai/.jupyter/jupyter_notebook_config.py

2. 生成访问密码

运行如下代码,并输出访问Jupyter时密码,生成sha1加密密码

from jupyter_server.auth import passwdpasswd()

这里输入的密码是lab123,对应生成的sha1加密密码为:sha1:adbe516d2745:aae3a189602f2078a323c71b413fee063226f7ba

注意

  • 在旧版本的JupyterLab中,passwd导入方式改为:from notebook.auth import passwd

  • 输入密码时光标不会跳,千万不要以为没输入成功。

3. 修改配置文件

在上面命令生成的配置文件末尾添加如下内容,上面的配置文件是

c.ServerApp.ip = '0.0.0.0' #设为0.0.0.1,将绑定所有地址,即所有IP地址都可以访问c.ServerApp.password = u'sha1:adbe516d2745:aae3a189602f2078a323c71b413fee063226f7ba'c.ServerApp.open_browser = False #启动后是否在浏览器中自动打开c.ServerApp.port = 8888 #指定一个访问端口80,默认8888c.ServerApp.allow_root = False#允许root用户开启c.ServerApp.notebook_dir = "/home/xiaobai/ipython"#设置工作的文档目录

注意

  • 在JupyterLab的旧版本中,将c的设置项从ServerApp改为NotebookApp

  • allow_root: 如果用root 用户启动 jupyter lab时,必须将其设置为True。实际上不建议使用 root 启动,因为这样可能在浏览器端 cmd 窗口直接暴露 root 权限

  • password: 这里的密码是在第2步骤中生成的sha1加密版的密码。

  • port: 示例中设置的 8888 端口

    • 应该是一个未被占用的端口,如果设置的端口被已经被占用,会依次尝试后面的端口,比如8889。
    • 是一个被防火墙允许的端口,如果是阿里云、腾讯云等服务器需要在官网修改安全策略。
  • notebook_dir:

    • 设置的是工作的文档目录,需要自行选择并创建(否则运行时会报错)

    mkdir /home/xiaobai/ipython

4. 启动JupyterLab服务为后台进程

nohup jupyter lab &

注意:输入的密码是加密之前的密码,比如在第2步中设置的是lab123,则输入lab123即可。