和 Python 2.x 说再见!

回眸只為那壹抹淺笑 提交于 2020-12-24 06:05:40
本文经授权转自公众号CSDN(ID:CSDNnews)
如果你仍在使用 2.x,那么是时候将你的代码移植到 Python 3 了

在技术的长河中,软件、工具、系统等版本的迭代本是常事,但由于使用习惯、版本的兼容性、易用性等因素,很多用户及开发者在使用或做开发的过程中,并不愿意及时同步更新,而这无疑为 IT 技术圈带来了诸多碎片化问题,正如系统之 Android、Windows,也正如编程语言之 Python。
近日,Python 因为其版本的碎片化问题遭到了英国国家网络安全中心(NCSC)的点名,NCSC 警告开发者们必须考虑将 Python 2.x 的代码库移植到 Python 3.x 版本上,主要是因为自 2020 年 1 月 1 日起,Python 2.x 将走到其生命的尽头,不再得到支持(EOL,End-of-life)。与此同时,NCSC 还将继续使用 Python 2.x 的公司比作 EOL 以引诱另一个 WannaCry(病毒) 或 Equifax(信息泄露)事件的发生。

01 Python 的应用现状
回望近些年才被 AI 点燃的 Python,其实并非是一门新的语言,它最早于 1989 年底由知名的荷兰计算机程序员 Guido van Rossum 发明,后来作为一门面向对象、直译式计算机程序设计语言于 1991 年面世。其 30 年的发展历程可谓比编程语言界的常青藤 Java 更为久远。
而论及 Java,一年两次迭代的速度早已让不少开发者痛苦不堪,其纷纷开启对 Oracle 的吐槽模式,并直言“马上推出 JDK 13 的你只管更新,不用顾及我们的感受,总之我们还坚守在 JDK 1.x”。事实上,不止 Java,Python 也有着相同的问题,很多人对 Python 旧版本的坚持反而也让该语言的核心开发者们也备受煎熬,因为旧版本在安全性、功能上均无法与新版本相媲美,容易出现很多 Bug。
根据著名 IDE 开发商 JetBrains 和 Python 基金会于今年年初发布的《Python Developers Survey 2018 Results》报告显示,Python 3 的采用率正在快速增长,将其作为主要解释器的开发者比例从 2017 年的 75% 上升到了 84%,不过与此同时,Python 2 仍占有 16% 的份额。
其中,在 Python 2.x 版本中,Python 2.7 最受欢迎且使用的人数最多,占比 93%。
那么这些开发者究竟为何不愿意升级?

02 Python 的版本之过
一直以来,语法简单、拥有丰富和强大类库的 Python 被称之为一门胶水语言, 它能够很轻松的把用其它语言制作的各种模块(尤其是 C/C++)轻松地联结在一起。
不过在版本的迭代过程中,Python 出现了一个经常被开发者们诟病的问题,即 于 2008 年发布的 Python 3 在设计时没有考虑向较早版本相容的问题,Python 2.x 版本与 Python 3.x 之间并不兼容。这意味着如果你的软件是基于 Python 2 开发的,想要迁移到 Python 3 上面,无疑需要耗费巨大的成本。而且在此过程中,如果项目涉及到诸多关于 Python 2 的类库,可能还会导致迁移失败。
而自此问题的出现让不少原本想要升级的开发者宁愿停留在以前的旧版本中,对此,有不少网友表示:
  • Python 2.x 和 Python 3.x 两者在编码效率上没有明显差距,但是 Python 3.x 却要花额外的成本处理兼容性问题;

  • 感觉 Python 2 和 Python 3 是两门不同的语言,只不过他们的语法相似罢了;

  • ......

除此之外,根据来自 Python 社区开发和共享软件的存储中心 Python Package Index 统计显示,当前主流的 Python 软件包中仍然有不少使用的是 Python 2.x 版本。且其中,每个包每个月的下载量高达百万次。而想要将这些包移植到 Python 3 上,也绝非是一件易事。

03 Python 2.x 淘汰乃大势所趋
诚然开发者有多少个不愿意,但 Python 2.x 淘汰已成必然趋势。早在 2018 年 3 月,Python 之父 Guido van Rossum 就曾在邮件列表上宣布 Python 2.7 将于 2020 年 1 月 1 日终止支持,这意味着之后 Python 2 将不再被统一维护,与之对应的是主流第三方库也不会再提供针对 Python 2 版本的开发支持。 不过,想要继续使用旧版本也并非不可,就如同 Java 一样,交付商业费用即可,但这样的做法在日新月异的技术圈中,显然不是长久之计。
如今 NCSC 的警醒,再次告诫开发者们,“如果继续使用不受支持的模块,公司就会冒着组织和数据的安全性风险,因为漏洞迟早会出现,而且没人会修复。”
与此同时,来自 NCSC 的平台安全研究员 Rich M 也于官方博客上列举了不升级 Python 2 将面临的种种问题:
依赖项
许多流行的项目,如 NumPy、Requests 和 TensorFlow 等承诺到 2020 年将停止支持 2.x,并且当前一些项目已经这么做了。
这意味着如果你想使用你喜欢模块的最新功能,那么就需要使用 Python 3。等待更新的时间越长,到时将更改的依赖项的 Python 3 版本会越多,更新起来会变得越困难。
或将阻碍其他开发者
如果你正在维护其他开发者所依赖的库,则可能会阻止他们更新到 Python 3。如果阻碍其他开发者,你会在间接、可能无意中加大其他项目面临的安全风险。
你也许不在公司外部发布任何代码,但要考虑可能也在内部使用你代码的同事。
错失最新的 Python 功能
  • 表达式的收益——允许生成器将其部分操作委托给另一个生成器。

  • Unicode 字符串——Unicode 处理起来更容易。

  • 打印函数——打印函数有额外的功能,使其更灵活。

  • 视图和迭代器取代列表——一些众所周知的 API 不再返回列表。比如说,字典返回键、值或两者的视图。

  • “multi-with”语句——复杂的 with 语句更易于阅读。

  • 使用 * 和 ** 解包——扩展 * 可迭代解包运算符和 ** 字典解包运算符的用途。现在可以在函数调用中使用任意数量的解包运算符。

  • 纯关键字实参——允许实参出现在 varargs 参数的后面。

  • F 字符串——运行时评估的一种新类型的字符串常量,可能含有任何有效的Python表达式。

  • 大量的加速和优化机制。



04 Python 2.x 如何迁移到 Python 3.x?


如今 Python 已经被广泛应用于 Google、 Facebook、 Netflix 等实践的生产环境中,也横扫了各大编程语言排行榜,对此,更有人预估,其可能在未来几年内超越 C 和 Java,成为无可争议的编程语言领导者。
那么对于普通的开发者而言,又该如何丢弃 Python 2.x 版本,向 Python 3.x 版本移植? 基于此,NCSC 给出了如下的一些程序、教程和书籍,希望对大家有所裨益:
  • Can I Use Python 3」(https://github.com/brettcannon/caniusepython3)是一个程序,它可以检查你项目的依赖项,看看有没有依赖项在阻止你使用 Python 3。使用该程序来查看你是否需要换掉任何使用 Python 2.x 的库。在这种情况下,有必要访问该库主页,看看是否有计划移植到 Python 3。

  • 「2to3」(https://docs.python.org/2/library/2to3.html)是一个 Python 程序,它试图将 2.x 源代码转换成 Python 3。它通常与 Python 解释器一起安装为脚本。如果你只想看看它对源代码进行的每次变更有何差异,则可以在不用编写任何更改的情况下运行该程序。注意:这并不完美,你可能仍需要手动修复一些代码。

  • 《支持Python 3:深入指南》(http://python3porting.com/)是一本免费的开源电子书,可指导你完成添加 Python 3 支持的过程。本书解释了你可能遇到的一些常见迁移问题,并列出了使用 Python 3中 的新功能改进源代码的方法。

  • 「Six 」(https://github.com/benjaminp/six)是一个 Python 2 和 3 兼容库,为开发者提供了编写与 Python 2 和 3 都兼容的代码。使用该库,开发人员可以选择使用哪个版本的 Python 解释器来运行代码。如果你决定使用该库,确保代码表明了这一点:Python 版本号可能很快增加到 4.0(截至本文发稿时最新版本为 3.7.4)。

  • 利用他人的经验来帮助你——很多人已讲述了移植代码库方面的经验。Dropbox 在 2018 年将代码库迁移到 Python 3,撰写了一篇博文详细介绍了经验(https://blogs.dropbox.com/tech/2018/09/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever/)。


本文转自公众号“CSDN”,ID:CSDNnews



“养码场”
现有技术人80000+
覆盖JAVA/PHP/IOS/测试等领域
80%级别在P6及以上, 含P9技术大咖30人
技术总监CTO 500余人


本文分享自微信公众号 - 养码场(yangmachang0)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!