学习Python的时候,为了快速验证我们学习的知识点,可以用Python自带的python命令进入REPL交互界面,输入Python语句。但实在不方便:

命令行环境,输错了一句就要重来(比如def一个函数)

如果某段逻辑写的有误,需要重新执行一遍所有代码。

所以代码长了,我们写成.py文件执行,但还是不得劲儿。

ipython倒是一个很不错的REPL,除了像python命令一样可以执行Python语句外,还会保留每一步输出,也是很多书籍和教程里面使用的工具,但还不够好。

直到我发现了jupyter notebook神器:http://jupyter.org/ ,它几乎满足了我所有的幻想!

如果用一句话描述,那就是:jupyter notebook就像一张“草稿纸”一样。

它的样子是这样的:


它可以记录你的所有命令和输出结果,每个命令都可以方便修改执行;整个“演算过程”可以直接保存成一个.ipynb文件,直接分享给另一个有jupyter环境的用户完整再现你的演算过程。

1. 支持markdown

原生支持markdown语法,这在演算或写教程的时候特别有用:代码和文档混合在一起:

方便的文档混写

方便的代码编辑

并且,由于是图形环境,对诸如matplolib等图表工具的支持良好,几乎可以当做“免费版matlab使用”

2. 丰富的内核(kernel)扩展

这还没完,除原生支持Python外,jupyter还可以通过扩展“内核(kernel)”支持你能想到的任何绝大多数语言,到Jupyter kernels上,可以查看其支持的语言列表,俨然成了一个生态,比如知名的有:

JavaScript
Haskell
Ruby
Go
Scala
PHP

3. GitHub支持其文件格式

jupyter生成的文件,github也直接支持预览,这一点也很赞。

4. 在线尝试jupyter

想尝试的话,可以通过以下途径:

官方demo

量化投资平台

另外,很多量化投资平台,也都是基于jupyter notebook搭建的,大家在上面写量化策略的

Python代码,进行策略验证。比如国内知名的:

5. 配置jupyter notebook

第一次启动jupyter

安装完毕后,执行jupyter notebook,即可快速启动jupyter,一般直接会弹出个浏览器页面,地址类似:

http://localhost:8888/?token=1bba445e9540f7d40e99e9e3b59dfe78212adfba0d6ae329

token是临时生成的字符串,可以直接登录进入。然而这种方式并不方便:

没有固定的登录密码

几乎没有配置(当然可以输入到命令行参数,但每次启动都要输入,太麻烦)

就像你想到的那样,肯定有配置文件。

添加配置文件

执行命令

jupyter notebook --generate-config

jupyternotebook--generate-config

按照国际惯例,该命令会在用户目录下创建一个配置目录,名字就像你猜的一样,就是.jupyter,目录里会看到一个jupyter_notebook_config.py的配置文件。

编辑配置文件

主要的配置项:

# 登录密码,默认没有密码,所以每次启动服务器后都会产生一个随机数token,配置了密码后就不用每次使用随机数token了

c.NotebookApp.password = ''
## 服务的端口,用默认的8888即可
c.NotebookApp.port = 8888
## 是否需要自动弹出浏览器,服务器端一般不需要
c.NotebookApp.open_browser = False
## The directory to use for notebooks and kernels.
## 不设置的话就是启动命令所在的目录
c.NotebookApp.notebook_dir = '/home/maoshuai/work'

# 登录密码,默认没有密码,所以每次启动服务器后都会产生一个随机数token,配置了密码后就不用每次使用随机数token了
c.NotebookApp.password=''
## 服务的端口,用默认的8888即可
c.NotebookApp.port=8888
## 是否需要自动弹出浏览器,服务器端一般不需要
c.NotebookApp.open_browser=False
## The directory to use for notebooks and kernels.
## 不设置的话就是启动命令所在的目录
c.NotebookApp.notebook_dir='/home/maoshuai/work'
如果要去远程可访问,还要打开ip限制(默认jupyter notebook只能本机访问):

c.NotebookApp.ip='*'
密码生成
需要注意的是,上面的c.NotebookApp.password配置的并非明文密码,按照配置文件上的注释步骤生成:
在命令行下输入ipython,进入REPL环境
执行:from notebook.auth import passwd;passwd()

根据提示输入明文密码

生成hash后的密码类似如下:

In [2]: from notebook.auth import passwd; passwd()
Enter password:
Verify password:
Out[2]: 'sha1:e4ac9ea2e432:ce17c208cac9c15c59dd6f34ffe2a262f6d65bf3'

In[2]:fromnotebook.authimportpasswd;passwd()
Enterpassword:
Verifypassword:
Out[2]:'sha1:e4ac9ea2e432:ce17c208cac9c15c59dd6f34ffe2a262f6d65bf3'

将sha1开头的一串字符,拷贝到c.NotebookApp.password字段即可。这样再次启动jupyter时,就有了密码输入界面。

6. 总结

以上就是jupyter notebook的简介,非常推荐。什么?没安装指南?这还要问,自己到官网上看啊!