Jupyter Notebook 安装和使用保姆级教程
一、什么是Jupyter Notebook?
1. 简介
2. 组成部分
① 网页应用
② 文档
.ipynb的JSON格式文件,不仅便于版本控制,也方便与他人共享。3. Jupyter Notebook的主要特点
编程时具有「语法高亮」、缩进、tab补全的功能。 可直接通过浏览器运行代码,同时在代码块下方展示运行结果。 以富媒体格式展示计算结果。富媒体格式包括:HTML,LaTeX,PNG,SVG等。 对代码编写说明文档或语句时,支持Markdown语法。 支持使用LaTeX编写数学性说明。 
二、安装Jupyter Notebook
0. 先试用,再决定



1. 安装
① 安装前提
② 使用Anaconda安装
conda install jupyter notebook 
③ 使用pip命令安装
把pip升级到最新版本
pip install --upgrade pip注意:老版本的pip在安装Jupyter Notebook过程中或面临依赖项无法同步安装的问题。因此「强烈建议」先把pip升级到最新版本。 
安装Jupyter Notebook
pip install jupyter三、运行Jupyter Notebook
0. 帮助
jupyter notebook --help 
jupyter notebook -h 
1. 启动
① 默认端口启动
jupyter notebook 
$ jupyter notebook 
[I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
[I 08:58:24.417 NotebookApp] 0 active kernels
[I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
注意:之后在Jupyter Notebook的所有操作,都请保持终端「不要关闭」,因为一旦关闭终端,就会断开与本地服务器的链接,你将无法在Jupyter Notebook中进行其他操作啦。 
http://localhost:8888。其中,“localhost”指的是本机,“8888”则是端口号。
② 指定端口启动
jupyter notebook --port <port_number> 
jupyter notebook --port 9999,即在端口号为“9999”的服务器启动Jupyter Notebook。③ 启动服务器但不打开浏览器
jupyter notebook --no-browser 

2. 主页面
① 主页面内容

cd 或 cd - 或 cd ~ 或cd /Users/这个命令将会进入你的家目录。 “ ” 是用户名。用户名两边不加尖括号“<>”。 
ls这个命令将会展示你家目录下的文件。 
② 设置Jupyter Notebook文件存放位置
⑴ 创建文件夹/目录
Windows用户在想要存放Jupyter Notebook文件的「磁盘」中「新建文件夹」并为该文件夹命名;双击进入该文件夹,然后复制地址栏中的路径。 Linux/macOS用户在想要存放Jupyter Notebook文件的位置「创建目录」并为目录命名,命令为: mkdir;进入目录,命令为:cd;查看目录的路径,命令为:pwd;复制该路径。注意:“ ”是自定义的目录名。目录名两边不加尖括号“<>”。 
⑵ 配置文件路径
一个便捷获取配置文件所在路径的命令: 
jupyter notebook --generate-config 
注意:这条命令虽然可以用于查看配置文件所在的路径,但主要用途是是否将这个路径下的配置文件「替换」为「默认配置文件」。如果你是第一次查询,那么「或许」不会出现下图的提示;若文件已经存在或被修改,使用这个命令之后会出现询问“Overwrite /Users/raxxie/.jupyter/jupyter_notebook_config.py with default config? [y/N]”,即“用默认配置文件覆盖此路径下的文件吗?”,如果按“y”,则完成覆盖,那么之前所做的修改都将失效;如果只是为了查询路径,那么一定要输入“N”。 

Windows系统的配置文件路径: C:\Users\\.jupyter\Linux/macOS系统的配置文件路径: /Users//.jupyter/或~/.jupyter/配置文件名: jupyter_notebook_config.py注意: 
ls命令会发现找不到“.jupyter”文件夹/目录。这是因为凡是以“.”开头的目录都是隐藏文件,你可以通过ls -a命令查看当前位置下所有的隐藏文件。⑶ 修改配置文件
Windows系统的用户可以使用文档编辑工具或IDE打开“jupyter_notebook_config.py”文件并进行编辑。常用的文档编辑工具和IDE有记事本、Notepad++、vim、Sublime Text、PyCharm等。其中,vim是没有图形界面的,是一款学习曲线较为陡峭的编辑器,其他工具在此不做使用说明,因为上手相对简单。通过vim修改配置文件的方法请继续往下阅读。 Linux/macOS系统的用户建议直接通过终端调用vim来对配置文件进行修改。具体操作步骤如下: 
⒜ 打开配置文件
vim ~/.jupyter/jupyter_notebook_config.py 

⒝ 查找关键词
/c.NotebookApp.notebook_dir,这时搜索的关键词已在文档中高亮显示了,按回车,光标从底部切换到文档正文中被查找关键词的首字母。⒞ 编辑配置文件
⒟ 取消注释

⒠ 保存配置文件
ESC键,从编辑模式退出,回到命令模式。:wq,回车即成功保存且退出了配置文件。「冒号(:)」 一定要有,且也是「英文半角」。 w:保存。 q:退出。 
⒡ 验证
jupyter notebook打开Jupyter Notebook,此时你会看到一个清爽的界面,恭喜!
⒢ 注意
以上所有命令均以「英文半角」格式输入,若有报错,请严格检查这两个条件,「英文」且「半角」。 这里仅介绍了vim编辑器修改配置文件的方法,没有对vim编辑器的详细使用进行讲解,所以无需了解vim编辑器的具体使用方法,只需要按照上述步骤一定可以顺利完成修改! 推荐有时间和经历时学习一下vim编辑器的使用。这款强大的编辑器将会成为你未来工作中的利器。 
四、Jupyter Notebook的基本使用
1. Files页面

① 笔记本的基本操作

② 笔记本重命名的两种方式
⑴ 笔记本内部重命名
⑵ 笔记本外部重命名
⑶ 演示

2. Running页面

3. Clusters页面
4. Conda页面
5. Nbextensions页面

五、拓展功能
1. 关联Jupyter Notebook和conda的环境和包——“nb_conda”☆
① 安装
conda install nb_conda 
② 使用
可以在Conda类目下对conda环境和包进行一系列操作。

conda类目 可以在笔记本内的“Kernel”类目里的“Change kernel”切换内核。

切换内核 
③ 卸载
canda remove nb_conda 
2. Markdown生成目录
不同于有道云笔记的Markdown编译器,Jupyter Notebook无法为Markdown文档通过特定语法添加目录,因此需要通过安装扩展来实现目录的添加。 
conda install -c conda-forge jupyter_contrib_nbextensions 
执行上述命令后,启动Jupyter Notebook,你会发现导航栏多了“Nbextensions”的类目,点击“Nbextensions”,勾选“Table of Contents ⑵”

nbextensions 之后再在Jupyter Notebook中使用Markdown,点击下图的图标即可使用啦。

添加目录 
3. Markdown在文中设置链接并定位
[添加链接的正文](#自定义索引词) 
<a id=自定义索引词>跳转提示a>
注意:
语法格式当中所有的符号均是「英文半角」。 “自定义索引词”最好是英文,较长的词可以用下划线连接。 “a标签”出现在想要被跳转到的文章位置,html标签除了单标签外均要符合“有头( )必有尾()”的原则。头尾之间的“跳转提示”是可有可无的。“a标签”中的“id”值即是为正文中添加链接时设定的“自定义索引值”,这里通过“id”的值实现从正文的链接跳转至指定位置的功能。 例:
1.有跳转提示语
2.无跳转提示语

4. 加载指定网页源代码
① 使用场景
② 方法
%load URL 
③ 例

5. 加载本地Python文件
① 使用场景
② 方法
%load Python文件的绝对路径 
③ 注意
Python文件的后缀为“.py”。 “%load”后跟的是Python文件的「绝对路径」。 输入命令后,可以按 CTRL 回车来执行命令。第一次执行,是将本地的Python文件内容加载到单元格内。此时,Jupyter Notebook会自动将“%load”命令注释掉(即在前边加井号“#”),以便在执行已加载的文件代码时不重复执行该命令;第二次执行,则是执行已加载文件的代码。
④ 例

6. 直接运行本地Python文件
① 使用场景
② 方法
%run Python文件的绝对路径 
!python3 Python文件的绝对路径 
!python Python文件的绝对路径 
③ 注意
Python文件的后缀为“.py”。 “%run”后跟的是Python文件的「绝对路径」。 “!python3”用于执行Python 3.x版本的代码。 “!python”用于执行Python 2.x版本的代码。 “!python3”和“!python”属于 !shell命令语法的使用,即在Jupyter Notebook中执行shell命令的语法。输入命令后,可以按 CTRL 回车来执行命令,执行过程中将不显示本地Python文件的内容,直接显示运行结果。
④ 例

7. 在Jupyter Notebook中获取当前位置
① 使用场景
② 方法
%pwd 
!pwd 
③ 注意
获取的位置是当前Jupyter Notebook中创建的笔记本所在位置,且该位置为「绝对路径」。 “!pwd”属于 !shell命令语法的使用,即在Jupyter Notebook中执行shell命令的语法。
④ 例

8. 在Jupyter Notebook使用shell命令
① 方法一——在笔记本的单元格中
⑴ 语法
!shell命令 
在Jupyter Notebook中的笔记本单元格中用英文感叹号“!”后接shell命令即可执行shell命令。 
⑵ 例

② 方法二——在Jupyter Notebook中新建终端
⑴ 启动方法
pwd命令查询当前所在位置的绝对路径。⑵ 关闭方法
⑶ 例

9. 隐藏笔记本输入单元格
① 使用场景
② 方法一
⑴ 代码
from IPython.display import display 
from IPython.display import HTML
import IPython.core.display as di # Example: di.display_html('%s:
' % str, raw=True)
# 这行代码的作用是:当文档作为HTML格式输出时,将会默认隐藏输入单元格。
di.display_html('', raw=True)
# 这行代码将会添加“Toggle code”按钮来切换“隐藏/显示”输入单元格。
di.display_html('''''', raw=True)
缺陷:此方法不能很好的适用于Markdown单元格。 
⑵ 例

③ 方法二
⑴ 代码
from IPython.display import HTML 
HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
}
$( document ).ready(code_toggle);
script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code.">form>''')
缺陷:此方法不能很好的适用于Markdown单元格。 
⑵ 例

10. 魔术命令
六、增加内核——“ipykernel” ☆
1. 使用场景
场景一:同时用不同版本的Python进行工作,在Jupyter Notebook中无法切换,即“New”的下拉菜单中无法使用需要的环境。 场景二:创建了不同的虚拟环境(或许具有相同的Python版本但安装的包不同),在Jupyter Notebook中无法切换,即“New”的下拉菜单中无法使用需要的环境。 
2. 解决方法之命令行模式
① 同时使用不同版本的Python
⑴ 在Python 3中创建Python 2内核
⒜ pip安装
首先安装Python 2的ipykernel包。 
python2 -m pip install ipykernel 
再为「当前用户」安装Python 2的内核(ipykernel)。 
python2 -m ipykernel install --user 
注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。 
⒝ conda安装
首先创建Python版本为2.x且具有ipykernel的新环境,其中“ ”为自定义环境名,环境名两边不加尖括号“<>”。 
conda create -n <env_name> python=2 ipykernel 
然后切换至新创建的环境。 
Windows: activate <env_name> 
Linux/macOS: source activate <env_name>
为「当前用户」安装Python 2的内核(ipykernel)。 
python2 -m ipykernel install --user 
注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。 
⑵ 在Python 2中创建Python 3内核
⒜ pip安装
首先安装Python 3的ipykernel包。 
python3 -m pip install ipykernel 
再为「当前用户」安装Python 2的内核(ipykernel)。 
python3 -m ipykernel install --user 
注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。 
⒝ conda安装
首先创建Python版本为3.x且具有ipykernel的新环境,其中“ ”为自定义环境名,环境名两边不加尖括号“<>”。 
conda create -n <env_name> python=3 ipykernel 
然后切换至新创建的环境。 
Windows: activate <env_name> 
Linux/macOS: source activate <env_name>
为「当前用户」安装Python 3的内核(ipykernel)。 
python3 -m ipykernel install --user 
注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。 
② 为不同环境创建内核
⑴ 切换至需安装内核的环境
Windows: activate <env_name> 
Linux/macOS: source activate <env_name>
注意:“ ”是需要安装内核的环境名称,环境名两边不加尖括号“<>”。 
⑵ 检查该环境是否安装了ipykernel包
conda list 
conda install ipykernel 
⑶ 为当前环境下的当前用户安装Python内核
若该环境的Python版本为2.x,则执行命令: 
python2 -m ipykernel install --user --name <env_name> --display-name "<notebook_name>" 
若该环境的Python版本为3.x,则执行命令: 
python3 -m ipykernel install --user --name <env_name> --display-name "<notebook_name>" 
注意: “ ”为当前环境的环境名称。环境名两边不加尖括号“<>”。 “ ”为自定义显示在Jupyter Notebook中的名称。名称两边不加尖括号“<>”,但「双引号必须加」。 “--name”参数的值,即“ ”是Jupyter内部使用的,其目录的存放路径为 ~/Library/Jupyter/kernels/。如果定义的名称在该路径已经存在,那么将自动覆盖该名称目录的内容。“--display-name”参数的值是显示在Jupyter Notebook的菜单中的名称。 
⑷ 检验
jupyter notebook启动Jupyter Notebook;在“Files”下的“New”下拉框中即可找到你在第⑶步中的自定义名称,此时,你便可以尽情地在Jupyter Notebook中切换环境,在不同的环境中创建笔记本进行工作和学习啦!3. 解决方法之图形界面模式


CTRL C关闭Jupyter Notebook的服务器然后重启Jupyter Notebook,在“File”的“New”的下拉列表里就可以找到你的环境啦。
七、Jupyter Notebook快捷键
1. Mac与Windows特殊按键对照表
| 符号 | Mac按键 | Windows按键 | 
|---|---|---|
| ⌘ | command | 无 | 
| ⌃ | control | ctrl | 
| ⌥ | option | alt | 
| ⇧ | shift | shift | 
| ↩ | return | return | 
| ␣ | space | space | 
| ⇥ | tab | tab | 
| ⌫ | delete | backspace | 
| ⌦ | fn delete | delete | 
| - | - | - | 
2. Jupyter Notebook笔记本的两种模式
① 命令模式
命令模式将键盘命令与Jupyter Notebook笔记本命令相结合,可以通过键盘不同键的组合运行笔记本的命令。 按 esc键进入命令模式。命令模式下,单元格边框为灰色,且左侧边框线为蓝色粗线条。 

② 编辑模式
编辑模式使用户可以在单元格内编辑代码或文档。 按 enter或return键进入编辑模式。编辑模式下,单元格边框和左侧边框线均为绿色。 

3. 两种模式的快捷键
① 命令模式
| 快捷键 | 用途 | 
|---|---|
| F | 查找和替换 | 
| ↩ | 进入编辑模式 | 
| ⌘⇧F | 打开命令选项板 | 
| ⌘⇧P | 打开命令选项板 | 
| P | 打开命令选项板 | 
| ⇧↩ | 运行当前单元格并选中下一个单元格 | 
| ⌃↩ | 运行选中单元格 | 
| ⌥↩ | 运行当前单元格并且在下方插入单元格 | 
| Y | 将单元格切换至code状态 | 
| M | 将单元格切换至markdown状态 | 
| R | 将单元格切换至raw状态 | 
| 1 | 将单元格设定一级标题 | 
| 2 | 将单元格设定二级标题 | 
| 3 | 将单元格设定三级标题 | 
| 4 | 将单元格设定四级标题 | 
| 5 | 将单元格设定五级标题 | 
| 6 | 将单元格设定六级标题 | 
| ↑ | 选中上方单元格 | 
| K | 选中上方单元格 | 
| ↓ | 选中下方单元格 | 
| J | 选中下方单元格 | 
| ⇧K | 向上多选单元格 | 
| ⇧↑ | 向上多选单元格 | 
| ⇧J | 向下多选单元格 | 
| ⇧↓ | 向下多选单元格 | 
| A | 在上方插入单元格 | 
| B | 在下方插入单元格 | 
| X | 剪切选中单元格 | 
| C | 复制选中单元格 | 
| ⇧V | 粘贴到上方单元格 | 
| V | 粘贴到下方单元格 | 
| Z | 撤销删除 | 
| D, D | 删除选中单元格 | 
| ⇧M | 合并选中单元格,若直选中一个则与下一个单元格合并 | 
| ⌘S | 保存 | 
| S | 保存 | 
| L | 转换行号 | 
| O | 转换输出 | 
| ⇧O | 转换滚动输出 | 
| H | 显示快捷键帮助 | 
| I, I | 中断Notebook内核 | 
| O, O | 重启Notebook内核 | 
| esc | 关闭页面 | 
| Q | 关闭页面 | 
| ⇧L | 转换所有单元格行号且设置持续有效 | 
| ⇧␣ | 向上滚动 | 
| ␣ | 向下滚动 | 
② 编辑模式
| Mac快捷键 | Windows快捷键 | 用途 | 
|---|---|---|
| ⇥ | ⇥ | 代码补全或缩进 | 
| ⇧⇥ | ⇧⇥ | 提示 | 
| ⌘] | ⌃] | 向后缩进 | 
| ⌘[ | ⌃[ | 向前缩进 | 
| ⌘A | ⌃A | 全选 | 
| ⌘Z | ⌃Z | 撤销 | 
| ⌘/ | 注释 | |
| ⌘D | 删除该行内容 | |
| ⌘U | 撤销 | |
| ⌘↑ | ⌃↑ | 光标跳转至单元格起始位置 | 
| ⌘↓ | ⌃↓ | 光标跳转至单元格最终位置 | 
| ⌥← | ⌃← | 光标位置左移一个单词 | 
| ⌥→ | ⌃→ | 光标位置右移一个单词 | 
| ⌥⌫ | ⌃⌫ | 删除前边一个单词 | 
| ⌥⌦ | ⌃⌦ | 删除后边一个单词 | 
| ⌘⇧Z | ⌃Y | 重做 | 
| ⌘⇧U | ⌃⇧Z | 重做 | 
| ⌘⌫ | ⌃⌫ | 删除该行光标左边内容 | 
| ⌘⌦ | ⌃⌦ | 删除该行光标右边内容 | 
| ⌃M | ⌃M | 进入命令模式 | 
| esc | esc | 进入命令模式 | 
| ⌘⇧F | 打开命令选项板 | |
| ⌘⇧P | 打开命令选项板 | |
| ⇧↩ | ⇧↩ | 运行当前单元格并选中下一个单元格 | 
| ⌃↩ | ⌃↩ | 运行选中单元格 | 
| ⌥↩ | ⌥↩ | 运行当前单元格并且在下方插入单元格 | 
| ⌃⇧- | ⌃⇧- | 以光标所在位置分割单元格 | 
| ⌘S | ⌃S | 保存 | 
| ↓ | ↓ | 下移光标 | 
| ↑ | ↑ | 上移光标 | 
4. 查看和编辑快捷键
① 查看快捷键
② 编辑快捷键
⑴ 方法一
⑵ 方法二
③ 例

八、关闭和退出
1. 关闭笔记本和终端
① 方法一
注意:此方法只能关闭笔记本,无法关闭终端。 
② 方法二
注意:此方法可以关闭任何正在运行的终端和笔记本。 
③ 注意
④ 演示

2. 退出Jupyter Notebook程序
Mac用户: control cWindows用户: ctrl c
y即可关闭服务器,这才是彻底退出了Jupyter Notebook程序。此时,如果你想要通过输入刚才关闭网页的网址进行访问Jupyter Notebook便会看到报错页面。评论
