整理 | 屠敏
来源 | CSDN(ID:CSDNnews)
在技术的长河中,软件、工具、系统等版本的迭代本是常事,但由于使用习惯、版本的兼容性、易用性等因素,很多用户及开发者在使用或做开发的过程中,并不愿意及时同步更新,而这无疑为 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(信息泄露)事件的发生。
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%。
那么这些开发者究竟为何不愿意升级?
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 上,也绝非是一件易事。
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表达式。
-
大量的加速和优化机制。
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/)。
-
Python 官网(https://docs.python.org/3/howto/pyporting.html)。
基于此,你会放弃 Python 2.x 吗?
参考来源:
https://www.ncsc.gov.uk/blog-post/time-to-shed-python-2
(*本文为 AI 科技大本营转载文章,转载请联系原作者)
◆
今晚8点,公开课直播
◆
推荐阅读
DeepMind提图像生成的递归神经网络DRAW,158行Python代码复现
KDD 2019高维稀疏数据上的深度学习Workshop论文汇总
说出来你可能不信,现在酒厂都在招算法工程师
姚班三兄弟3万块创业八年,旷视终冲刺港股
2019 AI ProCon日程出炉 : Amazon首席科学家李沐亲授「深度学习」
AI Top 30+案例评选等你来秀!
福利 | 马上为你安排和大咖面对面交流的机会,不可错过
92年小哥绞尽脑汁骗得价值800万比特币, 破案后警方决定还给受害者
你点的每个“在看”,我都认真当成了喜欢