IPython 6.0 新版本发布与总结

写在前面:最近一个月赶论文急的要死,从3月15日到4月15日一个月的时间,做了之前从来都没有做过和做到的事情,感觉还是收获颇丰。初步有了快速阅读英文文献的能力,初步有了组织语言,写一篇学术论文的想法。尽管着急上火的时候有种要吐血的冲动,但是现在作为一个过来人看这段经历和收获到的东西,对当初的吐血的感觉也没有了特殊的感觉。

总之收获到了一些东西,变强了一点点,就是不错的。

本篇原文:Release of IPython 6.0 四月十九日Ipython官方博客上的新版本Ipython的发布宣言,核心表达了对Python3新语言特性的钟爱和对Python2的抛弃却不放弃。

休假了一周之后总觉得得做些什么开始下一阶段的学习,那么大概就先做一篇翻译来进行复健运动吧。

(作者写文章很随意,有些表达,真不如看原文。如有转载,请注明译者

Ipython 6.0 更新日志

在5.0版本发布几乎一年以后,今天我们非常荣幸地发布了Ipython 6.0 版本。使用python3.3版本以上的用户可以向您的包管理者要求进行升级,以便使用这些新的特性。如果您使用pip的话:

首先请确保您的pip版本处于9以上:

pip --version

如果pip版本过低,请进行升级:

pip install pip --upgrade

之后,进行ipython的升级。

pip install ipython --upgrade

如果您安装了conda:

conda update ipython

不同的conda源或许会在几小时内或者几天内更新ipython到最新版本。

新特性页面中有更为详细的改动介绍,其中包括新的特性、我们所做的修改以及过时的特性。

高亮特性: Jedi 补全

其中一个最大的变化为Jedi的集成,这使得我们能够使用静态分析来进行代码补全,并且能够显示完整的类型。这将会为我们提供显示更丰富的Tab补全内容(例如:其允许提取并且显示完成器中函数的签名)的基础功能。而到目前为止,这些特性仅在命令行用户处可用,但IPykernel以及多种前端(如nteract)中使用这些特性的相关的工作已经在逐步展开。

Python 2 版本的夕阳红

正如我们在去年发布5.0时候讲的那样,Ipython 6.0以及后续的版本需要Python 3环境。而5.x分支现在仍然在维护并且会经常性地更新,因此Python 2的用户会看到这些更新,但是IPython 6.x中的新特性就不会迁移回去了。

我们已经做了许多工作,尽量减小IPython在Python2 和Python3 中安装的差异,但你仍然可能会发生一些错误。如果真的发生了一些错误,请参见Github上的readme部分。

如果你想了解更多关于Python2 谢幕版本的开发进程(seamless Python 2 sunset)并且准备参与PyCon2017的话,我们建议你参与我们的讨论使用用户友好的方式解决py2和py3之间兼容性的问题,周六,五月二十日下午15:15–16:00 PDT。

确保你有Pip9或者更高版本Pip

对于大多数终端用户,你所要考虑的只有保证你的pip版本高于9。你可以输下面的指令来检查你的pip版本:

pip --version

如果你的pip版本过老,你得在升级ipython之前升级你的pip:

pip install pip --upgrade

Pip 9+版本会为你安装最新的合适的ipython版本,这意味着使用Python2的话会为你安装5.x版本的ipython,你若使用Python3则会为你安装6.x版本的ipython。请务必确保这在你的所有python环境变量以及构建脚本中是一致的。而Ubuntu14.04 LTS版本的用户需要注意,系统自带的pip版本过于低,在进行ipython安装时不会为你安装正确的版本。不要忘记在你的不同安装脚本、持续性集成以及docker image里更新pip。

Python 3 宣言

我们十分关注Python2 和 Python3之间的无缝共存问题。这就是我们进行仅支持Python3的新版本发布这一转变的原因之一,而与此同时我们也会继续进行更加适合Python2版本的5.x版本ipython的维护。如果你想要了解更多的原因,你可以在python3宣言这里获取更多的信息。

如我们所料,在我们从一个单一的源迁移到仅使用Python3的源的过程中发现了许多挑战和陷阱。在克服这些债爱的过程中,我们学到了很多东西。我们已经将你可能产生的风险以及错误(以及解决方案)都写成了文档,在实用性部分,这也是Python3宣言中的一部分。

如果你是一个库的维护者,并且你准备停止对一个旧的Python版本的支持(即使是一个子版本),并且你想要尽可能降低给仍然使用低版本Pyhton库的用户带来的挫折,我们可以接受你的帮助。如果你想要加入我们,在这种新旧版本的转换过程中来解决相关问题的话,请加入我们的Github讨论

纯Python3支持的迁移

将IPython的代码完全迁移到Python3版本并不是一个简单的工作,并且是一个据我们所知的未知领域。但是开弓没有回头箭,并且希望能够考虑到可能出现的绝大多数问题。有了这样的前提,我们希望能够让其他想要步我们后尘的项目的转换更加轻松。

首先,谈谈个人对于写纯的Python3代码的经验。

IPython的代码库相比于上一次更新已经降低了1500行。当然,这并不仅仅是因为移除了对Python2的支持,但是其中不可忽视的一点是的,是因为移除了对Python2的支持。而这种代码量的减少是建立在增加新特性带来的新的几百行代码基础上的,因此更加具有象征性意义。大量的条件都被去除了,这使得代码更加简单易读并且更易于维护。阅读代码库的时候我们可以看到,许多在代码紧凑性上的改进也仅仅移除了部分实用函数,而这些函数仅为了提供两个平台上一致的表现。尽管这样,代码库中一部分代码仍然受到Python2代码的影响,因此迁移代码所带来的潜在收益更大。我们将会在前行过程中继续我们的追求,来逐步消除旧时代遗风,并且像往常一样,我们欢迎各位进行代码贡献。

这一变化减轻了代码贡献者在对IPython进行代码贡献时的负担。贡献者会花更少的时间考虑:“这在Python2中应当如何实现”,或者是由于在Python2中测试失败而重新写一次pull请求。与此同时,我们的测试目前在持续性集成服务上完成进度更快,因为他们需要运行的Python版本更少。

一组新的API使用了类型标注,这是Python3独有的语法,适当的加以使用的话能够使得代码更加清晰并且易于重构,同时使得文档能够集中描述函数的使用和为何使用,而不是描述函数的类型。我们同样能够使用Python3中的一些优美的特性,像是纯关键字的变量,而这在设计API时尤为有用。

从一个开发者的角度我们非常乐意有写纯Python3代码的机会,并且我们期待有像pathlib一样的更多的改进。

维持一个稳定的Python2分支

维持一个稳定的Python2分支的同时使其(Python3版本的代码)安装体验尽可能符合Python2用户的习惯是我们在进行纯Python3环境迁移过程中要考虑的重点。我们的第一个问题是我们如何确定Python2的用户在使用pip install命令时能够获取到适合他们的系统的Ipython最新的5.x版本(而不是不适合的最新的大于6.x版本Ipython)这使得我们打了一堆上游补丁程序(我们将在PyCon中做一个报告,来听听吧)和一些如何将这样的转换变得体验更加相近的一些指导。我们给pip pypi-legacy, warehouse (我们必须学习postgres数据库来完成这个)都打了补丁,同时改进了peps并且使用setuptools中最近的一些提升来使得Python用户能够和平地共存。用户所需要做的仅仅是使用9版本以上的pip,然后使用pip install,以及pip install -e,而不是直接调用setup.py。

迁移更多的代码到纯Python3环境下

Ipython是我们维护的第一个从Python2+3混合状态下迁移到纯Python3环境下的Python包。一些我们最近的项目(例如JupyterHub)从一开始就仅在Python3下运行。我们期待更多的Jupyter和Ipython项目会迁移到纯的Python3环境下。

由于Jupyter协议是一种语言无关的协议,所以使用运行在Python3环境中的Notebook服务器来在Python2内核上运行Python2代码是完全可能的。尤其是JupyterHub早已在纯的Python3环境下运行,我们预计,单一用户群的服务器将会紧随其后(译者注:大概意思是之后大家都会用Python3下的Jupyter来作为Notebook的服务器,反正能运行Py2和Py3的代码)。

结论

我们希望你能够享受这一版本。这将是一些其他牛逼的特性的基础,像是async/await REPL。我们希望自从我们第一次发布纯Python3版本之后我们的工作在python的Packaging生态系统中能够最小化这些不可预料的暂时的困难。我们期待着你们的后续反馈。

Trans by Lawbda,edit in 2017.04.23 14:32

    原文作者:胡莱人形
    原文地址: https://zhuanlan.zhihu.com/p/26524096
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞