Jupyter源于Ipython Notebook项目,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具,对Python的愈加流行和在AI领域的领导地位有很大的推动作用。
Jupyter目前支持超过40种编程语言,包括 Python, R, Julia, and Scala等。
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
所有其他接口(包括Notebook、Qt控制台、ipython控制台和第三方接口)都使用IPython Kernel。IPython Kernel是一个独立的进程,负责运行用户代码,以及计算可能的完成情况。前端(如Notebook或Qt控制台)通过使用ZeroMQ套接字发送的JSON消息与IPython内核进行通信;前端和IPython内核之间使用的协议在Jupyter中的消息传递中进行了描述。
这种设计的目的是允许基于同一内核轻松开发不同的前端,同时,也可以通过开发新的内核来支持新的编程语言。目前有两种方法可以为另一种语言开发内核:
Jupyter Notebooks是包含了代码、元数据、内容和输出的结构化数据。当保存到磁盘时,文件扩展名为.ipynb
,并使用JSON结构。有关notebook格式结构和规范的更多信息,请参阅nbformat文档。
Notebook server:不是内核,它主要负责保存和加载notebook,所以你可以编辑notebook,即使你没有该语言的内核(当然也无法运行代码)。
Kernel:对notebook文档一无所知:当用户运行它们时,它只接收要执行的代码单元。
使用工具 Nbconvert 将notebook文件导出为其他格式,比如HTML, LaTeX, 或者reStructuredText等。转换过程如下:
Preprocessors:在内存中修改notebook。比如:ExecutePreprocessor运行notebook中的代码并更新输出
Exporter: 转换notebook为其他格式。
Postprocessors:处理导出的文件。
下面是截至2017年的项目关系的图:
Jupyter lab是Jupyter的下一代基于Web的交互式开发环境,是 Jupyter Notebook的升级版。
在安装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中的界面,表示成功了。
当点击左边栏的文件浏览(File Browser)按钮,可以查看到notebook的root目录下的文件,上面有添加文件和文件夹、上传文件、刷新文件列表等按钮。
右边是notebook的工作区域, 整个notebook由单元格(cell)组成,以工作区域的上面有notebook的保存、单元的添加、删除、运行、单元类型切换等按钮。
该方式起源于vim编辑器。
由启动jupyterLab的启动参数--notebook-dir
指定
jupyter lab --notebook-dir="E:/Projects"
如果没有指定参数--notebook-dir
,则由配置文件中的参数c.ServerApp.root_dir
指定
配置文件可以通过下面命令生成(可参考第五部分内容进行设置):
jupyter lab --generate-config
如果配置文件中也没有指定,工作目录由启动JupyterLab时的当前路径决定。
Notebooks是包含了代码、元数据、内容和输出的结构化数据。当保存到磁盘时,文件扩展名为.ipynb
(存储在工作目录下的某个子目录中),并使用JSON结构。
文件名的修改可以在文件系统中修改,也可以在Web界面右键进行修改
当你正在使用Python编译器,需要用到命令行工具的时候,麻烦的事情就出现了:要在shell和IDLE之间进行切换。
但是,如果你用的是Jupyter,就完全不用这么麻烦,你可以直接在命令之前加一个!
,就能执行shell命令,完全不用来回切换,就能在Jupyter中执行任何命令。
下面是在windows系统中,使用命令dir
查看当前目前的文件内容
比如我们需要使用pip安装包的时候,便可以直接在JupyterLab的某个文档的单元中运行!pip install xxxx
即可。
快捷键可以干嘛,它不仅可以大大提高开发效率,还可以用来装X,正所谓一顿操作猛如虎。
不管你是奔着什么目的,都有必要掌握常用的快捷方式,下面按不同的模式列出了基本的快捷方式,并在自己经常使用的快捷方式前加*
注明。
*Shift-Enter : 运行本单元,选中下个单元
*Ctrl-Enter : 运行本单元
*Alt-Enter : 运行本单元,在其下插入新单元
*Ctrl-S: 保存并检查
*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+]:向右切换文档
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: 切换重写标志
↓: 光标下移
↑: 光标上移
并且都以%符号作为前缀
IPython魔法命令设计用于简洁地解决标准数据分析中的各种常见问题。魔法命令有两种形式:
%magic: 输出所有魔法指令帮助文档
%lsmagic:列出所有magics命令
%quickref:输出所有魔法指令的简单版帮助文档
%MagicName?:输出某个魔法命令详细帮助文档
查看魔法命令简单版的帮助文档
查看time魔法命令的使用帮助文档
这里只列出一些常用的行魔法命令:
%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
切换目录后,直接影响是当前进程。
%%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让很多人喜欢的原因在于它提供了丰富的插件,包括显示代码执行时间、生成目录、显示变量名、代码块折叠等各种让你舒适的功能。
在进行JupyterLab插件安装之前,需要安装node.js 和 npm,可运行如下命令进行安装。
!pip install nodejs npm -i https://pypi.tuna.tsinghua.edu.cn/simple
注意,命令前面加
!
是因为在jupyterlab中运行的,如果在终端运行的安装命令,去掉!
进入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
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,亦是如此操作):
jupyter lab --generate-config
运行上面的命令后,会生成jupyter的配置文件,比如这里生成的配置文件为:/home/xiaobai/.jupyter/jupyter_notebook_config.py
运行如下代码,并输出访问Jupyter时密码,生成sha1加密密码
from jupyter_server.auth import passwd
passwd()
这里输入的密码是lab123
,对应生成的sha1加密密码为:sha1:adbe516d2745:aae3a189602f2078a323c71b413fee063226f7ba
注意:
在旧版本的JupyterLab中,
passwd
导入方式改为:from notebook.auth import passwd
输入密码时光标不会跳,千万不要以为没输入成功。
在上面命令生成的配置文件末尾添加如下内容,上面的配置文件是
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
nohup jupyter lab &
注意:输入的密码是加密之前的密码,比如在第2步中设置的是
lab123
,则输入lab123
即可。