IPython3时代到来

IPython3时代到来

前言

我以前写过一些IPython高级用法, 还有在组内分享了一期IPython notebook的分享. 今天IPython3被release了. 它带来什么可以看一下release notes. 好吧, 我也没有意识到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数

django422113088

flask135912810

tornado13528626

ipython78985822

这是python最有名的几个项目. 可以看到ipython的star远落后于其他. 但是他的issue数却大大的高于其他, 一方面IPython覆盖的功能和逻辑更多更复杂. 一方面用户对IPython的依赖和兴趣要高很多, 还有一方面IPython也由于内容太多更容易有bug,且主要维护者都是科学家没有太多精力和兴趣做一些基础保障. 可见IPython的知名度不高, 但是对用户粘性却很高.

如何升级

假如你需要使用ipython notebook, 需要使用

pipinstall--upgrade"ipython[all]"

否则直接

pipinstall--upgradeipython

使用不同的内核(kernel)

IPython的组件大多是核心开发者开发的,中提到了kernel是这样几个:

BashEchoPython2Python3R

Bash是这个项目https://github.com/takluyver/bash_kernel/, 你可以直接

sudopipinstallbash_kernel

那么开始说kernel是什么, kernel是一个能执行各种语言的程序封装, 比如可以用notebook跑bash, 跑ruby, 能使用其他语言的语法. 上面的bash就是借用pexpect的replwrap实现的bash的封装.对比一下就知道了:

$/usr/local/bin/ipythonIn[1]:echo

---------------------------------------------------------------------------NameErrorTraceback(mostrecentcalllast)in()

---->1echo

NameError:name 'echo' is not defined

In[2]:bc

---------------------------------------------------------------------------NameErrorTraceback(mostrecentcalllast)in()

---->1bcNameError:name'bc' is not defined

$/usr/local/bin/ipythonconsole--kernelbash# 使用bash内核就可以使用这些bash下命令了IPythonConsole3.0.0

In[1]:echo'2-1'2-1

In[2]:echo'2-1'|bc

1

看一下我本地都能用什么kernel:

$ipythonkernelspeclistAvailablekernels:python2python3bashecho

python2就是系统默认的, 原来用的那个. 看到echo和python3的原因在这里:

$pwd/Users/dongweiming/.ipython/kernels$tree.├──echo# 在~/.ipython/kernels有这个echo的目录里面包含了正确地kernel.json就会出现对应的kernel│└──kernel.json├──echokernel.py└──python3└──kernel.json2directories,3files

看一下代码:

$catecho/kernel.json{"argv":["python","-m","echokernel","-f","{connection_file}"],"display_name":"Echo"}$catpython3/kernel.json{"display_name":"IPython (Python 3)","language":"python","argv":["python3","-c","from IPython.kernel.zmq.kernelapp import main; main()","-f","{connection_file}"],"codemirror_mode":{"version":2,"name":"ipython"}}$ipythonconsole--kernelpython3# 可以在python2下跑python3的代码了In[1]:printOut[1]:In[2]:print'sd'File"",line1print'sd'^SyntaxError:invalidsyntax

更多的自定义请看Wrapper kernels

当然这里默认都可以在notebook里使用

Widget

widget系统经过了很大的重构和更新, 全部信息在widget migration guide.

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的时候会出现这样的弹出框:

Thisnotebookhasbeenconvertedfromanoldernotebookformat(v3)tothecurrentnotebookformat(v4).Thenexttimeyousavethisnotebook,thecurrentnotebookformatwillbeused.OlderversionsofIPythonmaynotbeabletoreadthenewformat.Topreservetheoriginalversion,closethenotebookwithoutsavingit.

你记得保存一下会帮你自动转化为新版本, 下次再启动就可以. 假如由于bug或者其他原因想降级可以这样:

ipythonnbconvert--tonotebook--nbformat3

使用jinja2自定义模板

通过NotebookApp.extra_template_paths可以指定外部模板目录, 可以代替默认模板. 或者:

ipythonnotebook'--extra_template_paths=["/Users/dongweiming/.ipython/templates/"]'

比如你不喜欢ipython notebook提供的现有的目录页(http://localhost:8000/tree这样的路径). 你可以自己写一个叫做tree.html.的模板放在 /Users/dongweiming/.ipython/templates/目录下. 但是建议还是继承原来的tree.html, 再自由发挥.

使用ipython notebook的terminal功能.

在notebook页面上其实是可以直接使用websocket连接到服务器上的. 但是你需要安装terminado. 这样在/tree下新建的时候就能选择terminal了.

其他

剩下就是一些bug修改, 方法重命名, 功能增强, 去掉一些不再被维护的内容等等. 对95%的用户影响几乎没有.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容