跳转至

5.5.jupyter使用笔记

安装

anaconda 集成了 jupyter notebook,直接安装 anaconda 是使用 jupyter 的最简单方法。如果觉得 anaconda 太重了,直接使用 conda 或者 pip 安装jupyter也是没问题的。具体的安装过程参考 jupyter 的官网的教程:Installing the Jupyter Software

让代码窗口输出全部结果

  • 将此代码放置在jupyter单元中:

from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = "all" 
- 修改全局设置

在Windows中,以下步骤会使更改永久生效。应该适用于其他操作系统。您可能必须更改路径。

C:\Users\your_profile\\.ipython\profile_default

做一个ipython_config.py文件与下面的代码profile_defaults:

c = get_config() 
c.InteractiveShell.ast_node_interactivity = "all" 
- 使用print函数

快捷键使用指南

Jupyter Notebook 有两种键盘输入模式。即命令模式和编辑模式,这与 Vim 有些类似。在编辑模式下,可以往cell中键入代码或文本,此时命令模式下的快捷键不生效。在命令模式下,可以用快捷键命令运行单元格,移动单元格,切换单元格编辑状态等等,此时编辑模式下的快捷键不生效。

从命令模式进入编辑模式需按 Enter 键,从编辑模式切换到命令模式需按 Esc 键。

以下两表分别是对命令和编辑两种模式下快捷键的简单说明:

命令模式快捷键(按 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-/ 注释整行/撤销注释 仅代码状态有效

注: 如果快捷键被系统中的其它应用占用,则可能会失效

在任意目录下打开notebook

在该目录下:shift + 右键 👉 打开powershell,输入jupter notebook

自定义主题

通过pip安装jupyterthemespackage:

# 安装
pip install jupyterthemes
# 更新jupyterthemes
pip install --upgrade jupyterthemes
安装好jupyterthemespackage之后,就可以在命令行输入jupyterthemes的命令:
# 列出所有安装好的主题
jt -l
# 使用帮助
jt -h

具体使用方法参见:jupyterthemes官方说明

安装扩展

安装jupyter_contrib_nbextensions包。该插件并不是jupyter notebook官方的插件。具体参考Unofficial Jupyter Notebook Extensions为Jupyter Notebook安装扩展并启用Configurator

# 安装
pip install jupyter_contrib_nbextensions
# 或者通过conda安装
conda install -c conda-forge jupyter_contrib_nbextensions
# 激活
jupyter contrib nbextension install --user
# 启用
jupyter nbextensions_configurator enable --user

输出带有中文的pdf

jupyter notebook本身不能输出pdf,输出pdf依赖于$\LaTeX$引擎。目前,带有中文的ipynb文件输出为pdf会报错,主要原因是jupyter的$\LaTeX$模板设置了$\text{pdf}\LaTeX$引擎,但是Pdf$\LaTeX$不可以直接编译中文文档的。因此,需要把jupyter的$\LaTeX$引擎改为$\text{Xe}\LaTeX$引擎。

修改模板,模板位置为:...\site-packages\nbconvert\templates\latex\article.tplx,将latex模板类由article改为ctexart。

原来的代码:

((* block docclass *))
\documentclass[11pt]{article}
((* endblock docclass *))
修改后的代码:
((* block docclass *))
\documentclass[13pt]{ctexart}
((* endblock docclass *))
或者,依然使用 PdfLatex引擎,但引入 xeCJK 宏包:
\documentclass[11pt]{article}
\usepackage{xeCJK}
% 如果设置mainfont,必须设置为已安装的中文字体,例如微软雅黑。
%\setCJKmainfont{SourceHanSansCN-Light}
想要修改输出pdf的排版,则需要修改其预定义的latex排版模板,即base.tplx文件。例如可以在base.tplx加入如下代码控制输出的pdf的页边距。
\geometry{a4paper,left=2cm,right=2cm,top=1cm,bottom=1cm}
但是,可能改了jupyter的latex模板,jupyter notebook输出pdf依然报错。例如下面的报错信息:
nbconvert failed: PDF creating failed, captured latex output:
This is XeTeX, Version 3.14159265-2.6-0.99999 (TeX Live 2018/W32TeX) (preloaded format=xelatex)
 restricted \write18 enabled.
entering extended mode
! Undefined control sequence.
<*> .\notebook
              .tex
? 
! Emergency stop.
<*> .\notebook
              .tex
No pages of output.
Transcript written on ?.
这是jupyter中控制调用latex引擎的脚本pdf.py有bug,位于66行。

原来的代码:

writer = Instance("nbconvert.writers.FilesWriter", args=(), kw={'build_directory': '.'})
正确的代码:
writer = Instance("nbconvert.writers.FilesWriter", args=(), kw={'build_directory': ''})
原来的代码给xelatex引擎发送了错误的文件路径:

错误的路径:

xelatex .\notebook.tex
正确的路径:
xelatex notebook.tex
详细内容参考这里Problem in Converting Jupyter notebook to pdf #144

版本控制

Save and CheckPoint 和 Revert to CheckPoint。

使用非Python内核

jupyter 不仅仅可以使用 Python 内核,也可以使用其他语言作为后端。

C#、F#内核

如何为jupyter安装C#、F#的内核可以参考微软的教程:.NET Core with Jupyter Notebooks – Available today | Preview 1