JupyterLab使用教程
一、Jupyter简介
Jupyter源于Ipython Notebook项目,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具,对Python的愈加流行和在AI领域的领导地位有很大的推动作用。
Jupyter目前支持超过40种编程语言,包括 Python, R, Julia, and Scala等。
1. 用户接口
-
最新的基于web的交互式开发环境,适用于notebook、code和data。其灵活的界面允许用户配置和设计数据科学、科学计算、计算新闻和机器学习领域的工作流。模块化设计可以轻松的实现更多扩展功能。
本文主要讲解Jupyterlab的基本使用。
- 安装:
pip install jupyterlab
- 启用:
jupyter lab
- 安装:
-
上一代的基于 Web 的交互式开发环境,其功能在JupyterLab中已经包含,建议使用JupyterLab。
- 安装:
pip install jupyter
- 启用:
jupyter notebook
- 安装:
-
NBClassic 将基于 Jupyter Server运行Jupyter Notebook。
这个项目为JupyterLab和其他前端切换到Jupyter服务器作为Python Web应用程序后端做准备。使用这个包,用户可以在新的Python服务器后端上并排启动Jupyter Notebook、JupyterLab和其他前端。
- 安装:
pip install nbclassic
- 启用:
jupyter nbclassic
- 安装:
-
控制台前端
- 安装 :
pip install jupyter-console
- 启用:
jupyter console
- 安装 :
-
Qt控制台是一个非常轻量级的应用程序,在很大程度上感觉像一个终端,但它提供了一些只有在GUI中才可能实现的增强功能,例如内联图形、带有语法高亮显示的多行编辑、图形化调用提示等等。Qt控制台可以使用任何Jupyter内核。
- 安装:
pip install qtconsole
- 启用:
jupyter qtconsole
- 安装:
-
Voilá允许你将Jupyter笔记本转换成一个交互式仪表板,让你可以与他人分享你的工作。
- 安装:
pip install voila
- 启用:
voila <path-to-notebook> <options>
- 安装:
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环境:
如果安装的Anaconda发行版,该版本已经包含了JupyterLab,所以不需要再另外安装,否则按如下命令进行安装。
# 安装前先升级下pip
python -m pip install --upgrade pip
# 开始下载安装pip
pip 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
:处理多行输入
%%timeit
L = [n ** 2 for n in range(100000)]
L = [n ** 2 for n in range(100000)]
%%writefile
:将当前cell中内容写入文件中
%%writefile test.py
print('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_sql jupyter serverextension enable jupyterlab_sql --py --sys-prefix jupyter 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 passwd
passwd()
这里输入的密码是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,默认8888
c.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
即可。
文章出处登录后可见!