3  安装使用Jupyter Notebook

表 3.1: conda环境管理与Jupyter安装术语,以及帮助你理解它们的比喻
术语 比喻
环境 房间
环境创建
conda create -n 环境名称
新建一个房间
环境激活
conda activate 环境名称
进入一个房间
环境管理
装包conda install 包名称pip install 包名称
卸载包conda remove 包名称pip uninstall 包名称
装修一个房间:
给房间添置家具
从房间移除家具
在某个环境中安装Jupyter
pip install jupyter
在某个房间中添置一个叫做jupyter的家具
在某个环境中注册ipython核
python -m ipykernel install --user --name 核名称 --display-name "显示的核名称"
(要求已经在环境中安装了jupyter)
(注册核后,使用Jupyter Notebook时能通过核在相应环境中工作)
给某个房间配一把钥匙
钥匙的名字叫核名称
钥匙上有贴纸,上书显示的核名称
配这种钥匙的前提是已经添置了家具jupyter
环境删除
conda env remove -n 要删除的环境名称
砸毁一个房间

3.1 Jupyter Notebook是什么

3.1.1 文学编程

著名程序员高德纳推广了将文字说明与程序有机结合的思想,这种做法有助于代码与思想的传播,称为文学编程(literate programming)。 本教程融合了代码与文本,也是一种文学编程。 计算笔记本(computational notebook)是文学编程的另一种典型实践:笔记本可以包含并执行任意代码,笔记本文件可以用于分享数据、工作流程、可视化、代码等。

Jupyter项目的核心目的是提供计算笔记本交互式计算的工具和标准。此项目最早支持的编程语言是Julia,Python,R,因此得名Jupyter。 Jupyter项目有两个主要的笔记本编辑程序:Jupyter Notebook和JupyterLab。本教程介绍Jupyter Notebook,JupyterLab是Jupyter Notebook的进阶版。

3.1.2 Jupyter Notebook工作原理

Jupyter Notebook服务是多个独立模块共同运行的结果:

  • Jupyer 内核:笔记本编辑器为每个笔记本文件创建一个REPL1,称为内核(kernel)。Jupyter计划的前身IPython就是一个高级的REPL。
  • Jupyter Notebook的界面是网页应用,用浏览器查看。
  • Jupyter Server(服务器)与内核通信。

模块化使得拓展Jupyter变得容易。 如,其他人可以在Jupyter协议的框架下,编写全新的界面实现新的编辑功能,而不需考虑由Jupyter服务器负责的核新建与管理。

Jupyter用.ipynb文件存储笔记本文件。 .ipynb格式是一种 json 文档,将笔记本单元格、程序输出和元数据存放在结构化的文本文件中。

3.2 安装Jupyter

  1. 在Anaconda Prompt中,用conda install jupyter在当前环境中安装jupyter。(注意要先激活对应的环境) 如果conda install失败,尝试pip install jupyter
注记说明

如果你的环境中没有pip工具,可以用conda install pip在当前环境安装pip。

  1. 安装成功后,在Anaconda Prompt中输入jupyter --version,显示Jupyter核心包信息。( 图 3.1
图 3.1: 查看Jupyter核心包版本信息。图中显示,在tutorial环境中Jupyter成功安装。

3.3 注册核kernel

  1. 在当前环境中注册核:python -m ipykernel install

    此命令有多个选项,用python -m ipykernel install --help可查看( 图 3.2 )。部分命令如下:

    • --user,仅为当前用户(而非全系统)注册核
    • --name NAME,为核取名为NAMENAME可以由你自定义,但请用英文字母数字等常规ASCII字符取名。适用于你需要使用多个核的场景,系统根据NAME来区分各个核。
    • --display-name DISPLAY_NAME,指定核的显示名称为DISPLAY_NAMEDISPLAY_NAME应该被英文引号包围。此选项适用于你需要使用多个核的场景,jupyter notebook的网页界面会用DISPLAY_NAME来显示各个核。推荐用英文字母数字等常规ASCII字符取名。
  2. 查看当前环境中已注册的核:jupyter kernelspec list

  3. 删除特定核:jupyter kernelspec remove 核名称

图 3.2: 关于注册核的命令python -m ipykernel install的帮助文档
Anaconda Prompt
# 例子
# 为当前用户、在当前环境注册一个核
# 核名称为tutorial,此核在notebook网页应用界面中显示为"Python程序基础"
# 但是推荐display-name和name都用英文字母与数字,不要用中文
python -m ipykernel install --user --name tutorial --display-name "Python程序基础"

# 查看已注册的核
jupyter kernelspec list
图 3.3: 用ipykernel为当前环境注册内核,核名为tutorial,此核在notebook菜单中显示的名称是“Python程序基础”。
图 3.4: 查看已注册的核。
图 3.5: 用ipykernel注册内核后,在相应文件夹生成了kernel.json文件。
图 3.6: kernel.json文件记录了核的显示名称,关联的编程语言,关联的解释器路径等信息。

3.4 Jupyer Notebook使用

3.4.1 启动Jupyter Notebook

根据你安装的是Anaconda还是Miniconda,有两种方式:

  1. 如果安装的是Miniconda,在Anaconda Prompt中输入jupyter notebook,回车。(图 3.7)
  2. 如果安装了完整的Anaconda,开始菜单中的Anaconda文件夹下,有Jupyter Notebook图标,点击之。(图 3.8)
图 3.7: 启动Jupyter Notebook后的Anaconda Prompt。
图 3.8: Anaconda文件夹下的Jupyter Notebook图标。

不管使用哪种方法,Anaconda Prompt都会显示notebook服务器的一些信息( 图 3.7 ),同时浏览器会打开notebook仪表板( 图 3.9 ),默认URL是http://localhost:8888/tree

图 3.9: 浏览器显示的notebook仪表板。
注记注意

启动Jupyter服务器后,类似 图 3.7 中显示服务器信息的窗口不能随便关闭——关闭此窗口就会关闭Jupyter服务器,将导致不可使用Jupyter Notebook。只有在使用完毕Jupyter Notebook后,才可关闭此窗口。

3.4.2 新建notebook

  1. 在仪表板中导航到目标文件夹,新建的ipynb文件将位于这个文件夹中。 图 3.9 中,当前文件夹是Miniconda3的安装目录,也是当前用户的家目录。如果你不清楚应该把新建的ipynb文件放在哪个目录中,你可以将其放在桌面( 图 3.9 中的Desktop文件夹)。

  2. 点击左上角File-New-Notebook以新建notebook。此时会提示你选择kernel,选择之前注册的核即可。(图 3.10

  3. 点击Jupyter logo旁边的文件名(默认是Untitled1),重命名ipynb文件。(图 3.11

    图 3.10: 创建notebook时选择核
    图 3.11: 重命名ipynb文件。

3.4.3 打开既有notebook

本课程的教学材料中有一些.ipynb文件。将这些.ipynb下载到本地, 启动notebook服务后,导航到这些.ipynb文件所在的文件夹,单击这些笔记本文件就可打开。

直接双击ipynb文件,一般会通过文本编辑器打开一个json文件。

不启动Jupyter服务器,是无法通过浏览器正确渲染notebook文件内容并使用笔记本的全部功能的。

3.4.4 核操作

菜单中的Kernel选项中,有一些核操作:

  1. Interrupt Kernel,中断当前执行的代码,程序死机时用。中断核后,此前运行产生的数据都还在。

  2. Restart Kernel…,重启核,会清空此前运行程序产生的数据。当需要打断某个持续运行的代码框(该代码框前的方括号中显示*时),可以点击此选项。

图 3.12: 当一个代码单元格前的方框显示为如图中的[*],说明此单元格的代码正在运行。如果不想等待代码运行结束(可能是因为正在运行的是永不结束的死循环,也可能是死机,或是程序需要很长时间才能运行完而你就是不想等了,……),可以通过Interrupt Kernel或Restart Kernel中断代码的运行。
  1. Reconnect to Kernel,与Kernel连接中断时,用来重连。

  2. Shut Down Kernel,关闭当前notebook文件使用的核;Shut Down All Kernels…,关闭所有运行中的核。

图 3.13: notebook的Kernel选项。熟悉Jupyter Notebook的使用后,你可以猜想并验证上文没有提到的核操作的作用。

仅仅关闭显示某个ipynb文件的浏览器页面,并不关闭相应的核。 重新打开该ipynb文件后,还可以对该文件进行编辑,且此前运行产生的结果仍然保留着。

要真正停止程序运行,需关闭核(通过Kernel菜单中的Shut Down KernelShut Down All Kernels ...)。 关闭核后,Jupyter服务器还在运行,还可以重启核新建ipynb文件。

要停止全部Jupyter服务,可以点击菜单中的File-Shut Down,或关闭用于启动Jupyter Notebook的Anaconda Prompt窗口。

Jupyter Notebook的写作我们用一个ipynb文件展示,因此不在这里展开。

3.5 其他问题

3.5.1 启动jupyter notebook浏览器不打开

有时尝试启动Jupyter Notebook后,网页界面不会自动打开,Anaconda Prompt会提示”To access the server, open this file in a browser:“(要获取服务器,将此文件在浏览器中打开)( 图 3.14 )。只要复制下面的链接,在浏览器中打开,就可以使用Jupyter Notebook了。

图 3.14: Anaconda Prompt提示将某个文件在浏览器中打开。

3.5.2 已注册的核在网页界面中不显示

首先,用jupyter kernelspec list确认存在一些已经注册的核。

然后运行python -m ipykernel install,手动为该环境注册核。

这个问题的产生原因不明确,可能是设置文件中有一些问题。 经验证,用python -m ipykernel install能修复这些问题。

3.6 练习

  1. 在本课程的环境中安装Jupyter
  2. 在此环境中注册一个Jupyter内核。如果不知道给内核起什么名或显示名称,可以用自己的名字拼音。
  3. 打开一个.ipynb文件,使用2中注册的核。
  4. 新建一个.ipynb文件,将其重命名,使用2中注册的核。

3.7 参考资料

Jupyter官网:什么是Jupyter?

ipython文档:为多个环境创建核

Jupyter社区论坛:Python3核在菜单中不可用


  1. REPL(read, evaluate, print, loop)是一种编程技术,允许程序员交互式写代码、运行代码,返回结果,然后重复【写代码、运行代码,返回结果】的过程。此过程中产生的数据始终保存在内存中。↩︎