jupyter notebook是一个基于网页的交互式计算环境,它本身支持多种语言的开发,但常用于Python的开发。其优点是交互式强,易于可视化,尤其适用于需要频繁修改、实验的场景,比如数据分析、测试机器学习模型等。另一个优点是它是基于Web的,客户端运行于浏览器,而真正的Python环境(kernel)则运行于服务器。因此可以把计算引擎部署在计算力强大的后台服务器甚至是GPU服务器上,这对于很多深度学习的计算环境是很方便的。

jupyter notebook产品的官方主页为https://jupyter.org/

 

安装与启动

anaconda

如果安装了anaconda的python发行版,那么jupyter notebook就已经自带了。只需要从anaconda navigator中启动即可,如下图所示。

anaconda_jupyter_notebook

官方python

如果安装的是Python官方发行版,则需要自行安装jupyter notebook。安装过程可能会有点慢,因此它需要安装比较多的相关软件包。

pip install notebook

安装完成后,只需要敲入jupyter-notebook命令即可启动。

jupyter-notebook

[I 15:16:27.520 NotebookApp] Serving notebooks from local directory: /Users/gran/work_macpro/study/python/jupyter_notebook
[I 15:16:27.520 NotebookApp] Jupyter Notebook 6.1.6 is running at:
[I 15:16:27.520 NotebookApp] http://localhost:8888/?token=4f1c60188b984ab261fa033d936007d2e49b36b6b3c01261
[I 15:16:27.520 NotebookApp]  or http://127.0.0.1:8888/?token=4f1c60188b984ab261fa033d936007d2e49b36b6b3c01261
[I 15:16:27.520 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 15:16:27.528 NotebookApp]

 

不论是从anaconda启动,还是手动安装后通过命令行启动,jupyter notebook都会在后台启动一个web服务器,默认端口为8888。在浏览器中访问http://localhost:8888即可使用jupyter notebook。如下图所示。

jupyter notebook

 

使用详解

基本界面

从浏览其打开jupyter notebook后,主界面的Files标签里是一个文件浏览器。可以本机工作目录里的文件,如果是jupyter notebook文档可以直接打开;当然也可以在这里新建或者上传一个文档,如下图所示。

new_menu

选择新建一个python 3文档,则进入notebook文档界面,可以敲入python代码,并修改文档名称。如下图所示。

修改并保存文档后,再回到主界面,可以看到在Files标签里面多了一个hello_world.ipynb文件;而在Running标签则多了一个运行中的文档。

每当新建或者打开一个notebook文档,在主界面Running里面都会有一项对应的记录。在文档界面里面,这后台对应的运行引擎称为kernel。

以上就是jupyter notebook的主要界面,很简单。下面重点介绍文档界面的操作。

文档操作

文档界面又一个菜单栏和工具栏,同时还支持快捷键。实际应用中,推荐使用快捷键。文档界面的菜单里有两个新术语cell(单元)和kernel(内核)。

cell的编辑模式与命令模式

cell是一个jupyter notebook文档的基本组成单位,一个文档可以有一个或者多个cell。前面的截图中输入的hello world代码地方就是一个cell。cell有两种模式,编辑模式和命令模式。处于编辑模式时,cell中有光标闪烁,并且菜单栏右侧有编辑图标。快捷键esc可从编辑模式变为命令模式;在命令模式下按下enter则切回编辑模式。

cell类型

cell的类型有代码、Markdown和原始文档几种。混合使用代码cell和Markdown,可以形成一个很好的笔记文档。比如用Markdown来描述设计、算法和代码,其表达能力比Python自带的注释更丰富。在命令模式下,可以用快捷键改变一个cell的类型:

  • 快捷键y将一个cell类型变为代码cell
  • 快捷键m将一个cell类型变为Markdown

下图是一个混合的notebook示例,前面两个都是Markdown类型的cell,而后面的则是Python代码cell。

cell的输入与输出

对于代码cell,有输入和输出区域。输入区域就是输入源代码的,而输出区域则是代码的执行结果。要查看一个代码cell的输出结果,只需按下快捷键control+enter(⌃↩︎)。可以反复修改cell,修改后再次运行该cell则其输出也会根据最新的代码而变化。

万能的p命令

在命令模式下,如果按下键盘上的p键,则会弹出所有快捷操作的列表。因此,如果你记不住某个操作快捷键,那么就是用p命令吧!

 

总结一下,cell操作的快捷键盘(以mac book的键盘为例)。如果用过vi编辑器的话, 很多编辑快捷操作都似曾相识。

cell操作快捷键
编辑模式切换到命令模式esc
命令模式切换到编辑模式enter
快捷操作列表p(命令模式)
cell类型改为代码y(命令模式)
cell类型改为Markdownm(命令模式)
删除celldd(命令模式)
复制cellc(命令模式)
在上方插入一个新的cella(命令模式)
在下方插入一个新的cellb(命令模式)
在下方粘贴cellv(命令模式)
在上方粘贴cellshift v(⇧v)
运行cellcontrol enter(⌃↩︎)(编辑模式,命令模式)
运行cell并选中下一个cellshift enter(⇧↩︎)(编辑模式,命令模式)
运行cell并在下方插入一个新的celloprion enter(⌥↩︎)(编辑模式,命令模式)

内嵌帮助

在代码单元中,如果不知道某个函数的用法或者命令的用法,可以在其后敲入问好?然后运行,系统就会显示帮助文档。比如敲入pirnt?,然后运行该cell,则会显示内嵌的帮助文档。

 

还可以通过help()来启动交互式帮助控制台。

 

shell命令

在代码单元中,可以执行shell命令。shell命令以!开头,如下所示。

magic命令

jupyter notebook的代码单元还支持一种以%开头的称为magic的命令。这些命令包括一些内嵌的工具,如测量时间的%timeit,还有一些shell的功能,如%cat等。同样,可以在magic命令后面加?来显示使用帮助。下面是两个示例。

 

 

完整的magic命令可通过执行%magic命令来查看。

 

内核操作

内核操作可从文档界面的kernel菜单进入。

每个jupyter notebook文档在后台都有对应的运行环境,即一个内核。内核主要操作包括重启和关闭。每运行一个cell,内核里都有记录,会保存其状态;再运行很多cell后,或者经过多次修改后,之前运行的一些变量的结果可能不再适用,这种情况下可能就需要重启内核。重启后,所有的变量和状态都被清除,相当于一个cell都没运行的状态。如果想要重启后再运行所有cell,则执行"Restart & Run All",如果想要重启并清除输出结果,则执行"Restart & Clear Output"。

 

jupyter notebook里的cell并不一定要按照顺序执行,可以跳转到任何cell执行。内核有一个计数器,会标记每个执行过的cell顺序。比如下面的例子中,共有两个cell。先把所有的cell都运行一遍,然后修改第一个cell中的代码后,再跳转到第一个cell运行,第一个cell的输出结果更新了,同时第一个cell的执行顺序也变成了3。如下图所示。

 

正式这种小范围内随时修改、随时执行出结果的特性,是的jupyter notebook非常适用于边实验边写代码的开发。尤其是数据分析、机器学习模型的开发,往往需要反复实验、反复调参,因此jupyter notebook就很适合前期的开发。

安装kernel

jupyter notebook可以支持多种后台引擎(kernel),从而可以支持不同的开发语言。以bash为例,可以安装bash kernel。命令如下:

pip install bash_kernel
python3 -m bash_kernel.install --sys-prefix
Installing IPython kernel spec

带上--sys-prefix的作用是将kernel安装到虚拟环境(venv)中。

然后用jupyter kernelspec命令可以查看系统中的kernel。

jupyter kernelspec list

再启动jupyter-notebook,就可以创建bash脚本,并连接到bash kernel运行。

 

jupyter notebook可以支持的kernel有很多,流行的开发语言,比如JavaScript,TypeScript,go,Lua,C++等等都支持。详细列表可参见其WiKi页面https://github.com/jupyter/jupyter/wiki/Jupyter-kernels

对于数据科学领域,一个典型的应用是安装多个版本的Python kernel,比如Python 2.7和Python 3.x。这样可以在多个环境验证Python应用。不过这在conda环境操作起来更为方便。

nbviewer与笔记共享

使用jupyter notebook记录的笔记文件.ipynb可以通过nbviewer来渲染从而得到带输出结果的完整笔记。jupyter的wiki上列举了很多共享的jupyter笔记,详细可参见https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks

 

如果你自己生成了一个jupyter notebook的笔记,也可以到nbviewer的网站https://nbviewer.jupyter.org/去查看。只需要输入笔记文件的URL,nbviewer就会渲染输出图文并茂的完整笔记。

 

jupyter lab

jupyter lab则是jupyter notebook的改进升级版,被称为下一代的jupyter notebook。它的集成化更高,使用起来更像一个IDE,其启动界面如下图所示。不过实际使用起来跟jupyter notebook差不多。因此学会jupyter notebook也很容易使用jupyter lab。

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐