前言
我以前写过一些IPython高级用法,
还有在组内分享了一期[IPython notebook的分享](http://www.dongwm.com/archives/ji-jiang-zai-
bpugfen-xiang/). 今天IPython3被release了.
它带来什么可以看一下[release notes](http://ipython.org/ipython-
doc/3/whatsnew/version3.html).
好吧, 我也没有意识到ipython3来的会这样快. 这多半年来. 我作为一个150个贡献者之一, 见证了IPython的发展. 这是个里程碑的版本.
他带来了非常多的变化和新的特性. 今天我来帮大家迁移和解读一些吧.
IPython是什么? 本质上它是一个增强版的python交互模式解释器, 所见即所得的执行代码, 查看结果, 也拥有历史记录.
我认为这是一个python开发者必备的工具. 我个人依赖ipython常用的功能有:
- ipython notebook - 一个可以跑的在线可编辑可运行的笔记. 可以测试程序, 执行代码, 当做说明文档, 能帮助不擅长web开发的同学做出很多页面的效果, 支持markdown语法等
- 自动补全 - 当我
import xx
的时候 我可以像用zsh一样使用Tab自动补全对应的模块/方法的名字 - magic - 它提供很很多magic的函数命令, 比如你可以直接执行ls, pwd等. 还能使用其他shell命令, 调用编辑器等
- 它能通过?或者??帮我查看代码的注释, 接口参数等等.
- 它提供很多的配置选择, 可以使用内置/外部插件达到一些其他的功能, 比如autoreload - 你不需要退出ipython就能获得你已经import之后的代码修改后的效果.
- 它在分布计算, 数据分析上又很好的支持, ipython非常大的使用群体是科学家和算法工程师
它在python界有什么地位? 我肯定会带有个人色彩. 来一些github的数据说一说(截止到2015-03-01之前):
项目 | Issue数 | Star数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16django | 4221 | 13088
flask | 1359 | 12810
tornado | 1352 | 8626
ipython | 7898 | 5822
这是python最有名的几个项目. 可以看到ipython的star远落后于其他. 但是他的issue数却大大的高于其他,
一方面IPython覆盖的功能和逻辑更多更复杂.
一方面用户对IPython的依赖和兴趣要高很多,
还有一方面IPython也由于内容太多更容易有bug,且主要维护者都是科学家没有太多精力和兴趣做一些基础保障.
可见IPython的知名度不高, 但是对用户粘性却很高.
#### 如何升级
假如你需要使用ipython notebook, 需要使用
``` python
pip install --upgrade "ipython[all]"
否则直接
1 |
|
使用不同的内核(kernel)
IPython的组件大多是核心开发者开发的, 中提到了kernel是这样几个:
1 |
|
Bash是这个项目https://github.com/takluyver/bash_kernel/, 你可以直接
1 |
|
那么开始说kernel是什么, kernel是一个能执行各种语言的程序封装, 比如可以用notebook跑bash, 跑ruby, 能使用其他语言的语法.
上面的bash就是借用pexpect的replwrap实现的bash的封装.对比一下就知道了:
1 |
|
看一下我本地都能用什么kernel:
1 |
|
python2就是系统默认的, 原来用的那个. 看到echo和python3的原因在这里:
1 |
|
看一下代码:
1 |
|
更多的自定义请看[Wrapper kernels](http://ipython.org/ipython-
doc/3/development/wrapperkernels.html)
当然这里默认都可以在notebook里使用
Widget
widget系统经过了很大的重构和更新, 全部信息在[widget migration guide](http://ipython.org/ipython-
doc/3/whatsnew/version3_widget_migration.html).
Widget是什么? 这是ipython notebook的插件系统, 大部分的插件都可以看这里:
containers_widgets.ipynb,
看完就知道它是什么和它能做什么了.
在我分享notebook的项目divingintoipynb里你能看到我自定义的widget:
selectize_widget.ipynb,
和对应的widget_selectize.py.
custom.js在使用的时候也有了很大的变动,
可以看我分享项目的custom.js
Notebook format
原来的Notebook的版本是3, 现在已经升级为4. 他们是不兼容的版本. 在启动新版IPython访问你的ipynb的时候会出现这样的弹出框:
1 |
|
你记得保存一下会帮你自动转化为新版本, 下次再启动就可以. 假如由于bug或者其他原因想降级可以这样:
1 |
|
使用jinja2自定义模板
通过NotebookApp.extra_template_paths
可以指定外部模板目录, 可以代替默认模板. 或者:
1 |
|
比如你不喜欢ipython notebook提供的现有的目录页(http://localhost:8000/tree这样的路径).
你可以自己写一个叫做tree.html.的模板放在
/Users/dongweiming/.ipython/templates/目录下. 但是建议还是继承原来的tree.html, 再自由发挥.
使用ipython notebook的terminal功能.
在notebook页面上其实是可以直接使用websocket连接到服务器上的. 但是你需要安装terminado
.
这样在/tree下新建的时候就能选择terminal了.
其他
剩下就是一些bug修改, 方法重命名, 功能增强, 去掉一些不再被维护的内容等等. 对95%的用户影响几乎没有.
版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议
python