Jupyter 小记

介绍

Jupyter是从IPython中拆分出来的独立应用,同事也是开源软件,主要用途是interactive data science and scientific computing。从IPython迁移到Jupyter,主要是配置和数据等路径的修改,参见官方文档。目前版本5.x(6.x, 2018年6月)。

几个概念:

  • IPython(interactive computing in Python)通常指的是Python的一种REPL Shell,比官方提供Shell功能更强大(Tab补全、Magic)。补:IPython 6.x开始不再支持和兼容Python 2。
  • Jupyter是对IPython和Python解释器分离出来而独立的一个应用(起源于2014年,IPython 4.x开始,IPython仅仅作为基础的内核),不仅支持Python,还有Ruby、Julia等。
  • Jupyter notebook是一个基于Web的应用,起源于IPython notebook(所以文件保存的后缀是.ipynb,本质是JSON文件),也就是本文主要内容。
  • 此外还有相关的nbviewer(ipynb文件的格式渲染和pdf/html输出工具)和jupyterhub(提供 jupyter文档托管服务)

Jupyter特点:

代码(包括运行结果)和文档(包括公式和图表)都能同时展示,以及Python语言和相关库的优势。
相关参考实例的网站:https://nbviewer.jupyter.org/


安装,测试

在线使用

网址:https://try.jupter.org

本地使用(安装)

  • 方式1:需要先安装Python再安装Jupyter
    1. 安装Python(这里使用Python 3)
    2. pip安装Jupyter(会自动包含IPython kernel等组件)
$ pip3 install --upgrage pip # 保证pip是最新版本
$ pip3 install jupyter
  • 方式2:安装Anaconda(已包含Python和Jupyter等)推荐
    升级
$ conda update jupter
$ pip3 install --upgrade jupyter

说明:
代码框中开始的$表示命令行提示符,无需输入;非开始的#表示注释的开始

补充:如何实现Jupyter Notebook同时支持Python 2和Python 3
在已安装Python 3情况下(例如使用Anaconda3安装);安装其他内核参见:https://github.com/jupyter/jupyter/wiki/Jupyter-kernels

# 建立一个Python2的虚拟环境
conda create -n py2  python=3
# 激活环境
source activate py2
# 安装ipykernel
conda install ipykernel
# 查看
python -m ipykernel install --user

# 启动notebook,可以看得Python2和Python 3内核
jupyter notebook
同时支持Python 2和Python 3

Jupyter Notebook

组件

Jupyter中包括notebook, console和qtconsole。其中:

  • console类似ipython;
  • qtconsole使用qt实现的终端,可以在终端显示图片等高级特性;
  • notebook是基于浏览器Web技术的开发环境,可以进行写作文档和执行代码,包括web application和notebook documents;
    • web application等同于一个编辑器,除了支持普通代码,还包括富媒体信息如HTML,LaTex,Markdown,MathJax和各种图像格式;
    • notebook documents以JSON格式保存为.ipynb文件,可以通过bfconvert转成HTML、PDF等格式。

运行

启动Notebook服务器:

$ jupyter notebook
$ jupyter notebook my_notebook.ipynb # 打开my_notebook.ipynb
$ jupyter notebook --port 9999 # 设置自定义端口
$ jupyter notebook --no-brower # 启动时不打开浏览器
$ jupyter notebook --ip="*" # 允许任意IP连接,可用于局域网共享
$ jupyter notebook --help # 帮助信息

补充:

  • Linux中避免SSH退出导致进程终止
    nohup jupyter notebook
  • 查看正在运行的Notebook(可以方便查看tokens)
    jupyter notebook list

在浏览器中输入http://localhost:8888,打开Notebook Dashbord(仪表盘),可以建立:文本文件(Text File,txt)、文件夹(Folder)、命令行(Terminal)、笔记本(Notebook, ipynb)。
浏览器页面区域可分为 4 块,从上到下依次为:

  • 标题栏:可修改文件名(默认Untitled)
  • 菜单栏
  • 工具栏
  • 编辑区:代码和文档区域

jupyter notebook可以启动多个,端口号会自动累加。

相关操作

notebook document的结构

  • Code cells:用于写代码 (命令模式中Y键设置)
  • Markdown cells:写markdown文档(命令模式中M键设置)
  • Raw Cells: 代码或文档的输出信息

快捷键

快捷键的操作可以在文档上部的菜单栏/工具栏中找到。

  • Shift-Enter: 运行当前cell并自动跳转到下一个cell(如果后面没有新的cell,会新建一个)【=菜单栏Cell->Run Cells】
  • Ctrl-Enter: 仅运行当前cell(指针位置不改变)
  • Alt-Enter: 执行当前cell并插入一个新的cell
  • Enter: 进入编辑模式,(框的颜色变为绿色,等于鼠标点击)
  • Esc: 进入命令模式(框的颜色变为蓝色)
  • Ctrl+Shift+P:打开命令面板(Firefox中快捷键冲突,可使用扩展Menu Wizard禁用相关快捷键),快速查找命令

以下需要在命令模式(Esc进入,类似vim)中有效,主要是文档编辑命令:

  • 删除cell: 两次D
  • 撤销删除:Z
  • 注释/取消注释: Ctrl+/
  • cell显示行号:L
  • cell首行转为一/二……六级标题(Head N):12……
  • 选中多个cell: Shift+J/K (J向下,K向上)
  • 合并:Shift +M
  • 查找和替换:ESC+F (不包括代码输出内容)
  • 输出区域折叠:ESC+O

文本编辑:

  • 多光标操作: 按Alt+鼠标点击或拖拽

更多参见菜单栏【Help->Keyborad shortcuts】

高级操作

  • 代码补全:TAB键
  • 函数查询:函数名前/后加? (括号可选)
import math
import numpy as np
?math.cos()
np.array?
  • 执行系统命令
    在命令(系统相关)前加入!, Shift-Enter执行。如显示目录
  • 魔法函数:以%开头
%lsmagic # 查看所有魔法命令

%run ./xx.ipynb # 运行一个jupyter notebook,并非导入python模块
%matplotlib inline # 采用行内模式,在绘图输出函数后加冒号可抑制输出结果
  • 调用其他语言核:使用%%
    • %%bash
    • %%HTML
    • %%python2
    • %%python3
    • %%ruby
    • %%perl

安装其他语言的核,如R,可以用:
conda install -c r r-essentials

配置

配置文件

jupyter notebook --generate-config

浏览器Token问题

默认启动时,如果手动输入URL,需要填写token。

解决(还是有问题,待解决):

  1. 生成sha1密钥

在Jupyter Notebook新建文件,输入并执行,输入密码后获得sha1:xxx的密钥值

from notebook.auth import passwd
passwd()
  1. 将密钥值写入配置文件用户路径/.jupyter/jupyter_notebook_config.py
    该配置文件可通过jupyter notebook --generate-config生成,文件末尾写入内容:
c.NotebookApp.password = 'sha1:xxx' # 可以找到相应值,取消注释并修改

字体和主题

  • 方式1: 参见扩展管理器,安装jupyter-thmes github项目站点配置
  • 方式2:修改custom.css的配置文件
  • 方式3:浏览器中修改自定义的字体
  • 方式4: 浏览器安装stylish扩展(此扩展因窃取用户浏览历史等的安全问题已被主流浏览器下降,因尽快删除)

相关讨论知乎:jupyter notebook中显示字体如何调整?

扩展管理器

jupyter_contrib_nbextensions github网站
安装使用:jupyter contrib nbextension install --user

  • jupyter Dashboard
  • 主题
    jupyter-thmes github
    使用jt命令设置:
$ jt -h # 帮助
$ jt -l # 列出可用的主题
$ jt -t chesterish # 使用某个主题,需要重启Jupyter Notebook

其实是在用户路径~/.jupyter/custom/custom.css定义了样式
Anaconda3\Lib\site-packages\notebook\static\custom\custom.css

  • 分享: HTML格式分享,使用菜单栏【File->Download as -> HTML】导出HTML格式文件

Linux非Bash环境使用注意

  • Zsh
  • Fish: 存在source activate错误
set PATH $PWD/anaconda3/bin $PATH
source (conda info --root)/etc/fish/conf.d/conda.fish

参考

推荐阅读更多精彩内容