本文基于并使用jupyter lab 0.35.6
1. 了解编辑模式和命令模式
类似vim,notebook也有命令模式和编辑模式。在编辑模式中按下esc就会进入命令模式,点击任何一个cell,或者按下enter可以进入编辑模式。如果你用过vim,就应该不难想象这两个模式的作用:在不同的模式下,编辑器提供的很多好用的快捷键,方便你进行方便快捷的操作。
如果你习惯了某种编辑器,你可以将快捷键映射成和vim, emacs, 或是sublime风格。
无须记住所有快捷键,但是有一些相信会对比帮助很大:比如
- 在命令模型下按下"y" 或者 "m", 可以让cell在code和markdown之间切换。
- 在命令模式下按下"dd", 可以删除cell。
- 按下 "shirft+enter", 运行本cell并选中下一个cell,而"Alt-Enter", 在运行本cell时,在下方插入一个新cell。
- 命令模式下,"shirft+m", 合并本cell和下一个cell。
- 命令模式下:"c", "x", "v" 分别表示复制,剪切,粘贴cell。
下面列出了更多快捷键。
命令模式快捷键(按 Esc 键开启):
| 快捷键 | 作用 | 说明 |
|---|---|---|
| Enter | 转入编辑模式 | |
| Shift-Enter | 运行本单元,选中下个单元 | 新单元默认为命令模式 |
| Ctrl-Enter | 运行本单元 | |
| Alt-Enter | 运行本单元,在其下插入新单元 | 新单元默认为编辑模式 |
| Y | 单元转入代码状态 | |
| M | 单元转入 markdown 状态 | |
| R | 单元转入 raw 状态 | |
| 1 | 设定 1 级标题 | 仅在 markdown 状态下时建议使用标题相关快捷键,如果单元处于其他状态,则会强制切换到 markdown 状态 |
| 2 | 设定 2 级标题 | |
| 3 | 设定 3 级标题 | |
| 4 | 设定 4 级标题 | |
| 5 | 设定 5 级标题 | |
| 6 | 设定 6 级标题 | |
| Up | 选中上方单元 | |
| K | 选中上方单元 | |
| Down | 选中下方单元 | |
| J | 选中下方单元 | |
| Shift-K | 连续选择上方单元 | |
| Shift-J | 连续选择下方单元 | |
| A | 在上方插入新单元 | |
| B | 在下方插入新单元 | |
| X | 剪切选中的单元 | |
| C | 复制选中的单元 | |
| Shift-V | 粘贴到上方单元 | |
| V | 粘贴到下方单元 | |
| Z | 恢复删除的最后一个单元 | |
| D,D | 删除选中的单元 | 连续按两个 D 键 |
| Shift-M | 合并选中的单元 | |
| Ctrl-S | 保存当前 NoteBook | |
| S | 保存当前 NoteBook | |
| L | 开关行号 | 编辑框的行号是可以开启和关闭的 |
| O | 转换输出 | |
| Shift-O | 转换输出滚动 | |
| Esc | 关闭页面 | |
| Q | 关闭页面 | |
| H | 显示快捷键帮助 | |
| I,I | 中断 NoteBook 内核 | |
| 0,0 | 重启 NoteBook 内核 | |
| Shift | 忽略 | |
| Shift-Space | 向上滚动 | |
| Space | 向下滚动 |
编辑模式快捷键( 按 Enter 键启动):
| 快捷键 | 作用 | 说明 |
|---|---|---|
| Tab | 代码补全或缩进 | |
| Shift-Tab | 提示 | 输出帮助信息,部分函数、类、方法等会显示其定义原型,如果在其后加 ? 再运行会显示更加详细的帮助 |
| Ctrl-] | 缩进 | 向右缩进 |
| Ctrl-[ | 解除缩进 | 向左缩进 |
| Ctrl-A | 全选 | |
| Ctrl-Z | 撤销 | |
| Ctrl-Shift-Z | 重做 | |
| Ctrl-Y | 重做 | |
| Ctrl-Home | 跳到单元开头 | |
| Ctrl-Up | 跳到单元开头 | |
| Ctrl-End | 跳到单元末尾 | |
| Ctrl-Down | 跳到单元末尾 | |
| Ctrl-Left | 跳到左边一个字首 | |
| Ctrl-Right | 跳到右边一个字首 | |
| Ctrl-Backspace | 删除前面一个字 | |
| Ctrl-Delete | 删除后面一个字 | |
| Esc | 切换到命令模式 | |
| Ctrl-M | 切换到命令模式 | |
| Shift-Enter | 运行本单元,选中下一单元 | 新单元默认为命令模式 |
| Ctrl-Enter | 运行本单元 | |
| Alt-Enter | 运行本单元,在下面插入一单元 | 新单元默认为编辑模式 |
| Ctrl-Shift-- | 分割单元 | 按光标所在行进行分割 |
| Ctrl-Shift-Subtract | 分割单元 | |
| Ctrl-S | 保存当前 NoteBook | |
| Shift | 忽略 | |
| Up | 光标上移或转入上一单元 | |
| Down | 光标下移或转入下一单元 | |
| Ctrl-/ | 注释整行/撤销注释 | 仅代码状态有效 |
2. 了解ipython的magic
在code中输出%开头的命令,成为magic。magic很有用,下面是一些常用的Magic:
| magic | 作用 |
|---|---|
| %lsmagic | 查看支持的magic |
| %time, %timeit and %%time | 计时,%%time表示cell级别的计时 |
| %matplotlib | 保证 Jupyter Notebooks 展示图表 |
| %load_ext | 加载插件,比如%load_ext autoreload 是最常用的命令之一,加载自动更新引用module的插件 |
| %system | 使用shell. 使用!也可以完成这个功能 |
| %who_ls | %who_ls 输出环境中的变量 |
| %run | 可以从.py文件执行Python代码. 也可以执行其他的Jupyter notebook。 |
| %writefile %pycat | %writefile魔法保存cell的内容到一个外部文件。%pycat则刚好相反,并且会向你展示高亮后的外部文件。 |
| %pdb %debug | %pdb 打开pdb调试代码, %debug能异常时自动打开pdb |
| 运行其他语言代码 | %%bash %%HTML %%python2 %%python3 %%ruby %%perl |
更多magic可以用%lsmagic查看,或者查阅ipython文档
通常在notebook的第一个cell就设置常用的magic
比如最常用的几个:
%matplotlib inline
%reload_ext autoreload
%autoreload 2
下面是几个magic的例子:
%%time
for i in range(4000): a = i**i
%time for i in range(2000): a = i**i
CPU times: user 80 ms, sys: 0 ns, total: 80 ms
Wall time: 83.4 ms
CPU times: user 616 ms, sys: 0 ns, total: 616 ms
Wall time: 651 ms
from numpy.random import randint
import matplotlib.pyplot as plt
# Sample 1000 random values to create a scatterplot
x = randint(low=1, high=1000, size=100)
y = randint(low=1, high=1000, size=100)
%matplotlib inline
plt.scatter(x, y)
plt.show()

image
%%HTML
This is <em>really</em> neat!
This is really neat!
%%latex
Some important equations:$E = mc^2$
$e^{i pi} = -1$
Some important equations:$E = mc^2$
$e^{i pi} = -1$
3. 了解ipython help和文档
代码补全
当你输入一个函数,按下tab时,你会发现,所有相关的函数都会列出来,如果只有一个,它会自动补全。

image
寻找文档或者源代码
在函数或者模块后输入? 或者 ?? 分别可以输出详细的python文档和源代码。(在jupyter中文档是以下方弹出框或者链接的方式展示,而jupyter lab目前还是以直接输出的形式显示,这一点未来可能会变化)


- 了解常用的kernel和插件
社区通过kernel的方式支持除了python之外的更多语言。
jupyter的支持多种扩展方式,社区提供了许多很好的插件,下面列出了一些常用的优秀插件。更多插件推荐。
| 插件 | 说明 |
|---|---|
| LaTeX | 支持编辑 LaTeX 文档. |
| DrawIO | 支持在你的JupyterLab创建和编辑 drawio图表 . |
| Table of Contents | 为你的 markdown 文档生成toc. |
| Go to definition | 支持 Alt + click 跳转 |
| Code Formatter | Easily beautifies Python code inside JupyterLab using one of the formatters: Black/YAPF/AutoPEP8. |
| Git | Git extension |
| GitHub | GitHub extension |
| ipywidgets | Interactive widgets for the Jupyter Notebook |
目前(本文的编辑时间20190623)的jupyter lab版本处于0.35.6,而最新的未release版本为1.0,新旧版本改动较大,插件不兼容,所以安装的时候需要关注插件是否支持你的jupyter版本(比如某些插件还未提供1.0版本的支持,所以目前还是使用jupyter lab比较可靠)。
5. 用容器运行jupyter lab
使用容器一键启动jupyter环境,使用dockerfile定制运行环境,保存你的notebook到对象存储或者网盘上,这样你就可以在任何时候任何地方快速启动你的jupyter lab了。
以下是我运行jupyter lab的方式:
- 挂载我的腾讯云对象存储cos数据到本地(你也可以用google driver之类的插件对接google driver,目前还没有cos插件)
- 运行jupyter镜像,这个镜像ccr.ccs.tencentyun.com/leiwang/jupterlab:latest 使用python3.6制作,安装了上文中提到的所有插件,并安装的一些常用的python包。你可以查看Dockerfile
cosfs data-1251825869 /data/cos -ourl=http://cos.ap-shanghai.myqcloud.com -odbglevel=info
docker run -d --mount type=bind,bind-propagation=shared,source=/data,target=/opt/app/data --net=host ccr.ccs.tencentyun.com/leiwang/jupterlab:latest jupyter lab --ip=xxx --no-browser --notebook-dir=/opt/app/data --allow-root
配置完成之后的效果图


推荐在腾讯云的tione上直接打开运行jupyter lab,省略复杂的配置步骤。