整理 | 屠敏

来源 | 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万比特币, 破案后警方决定还给受害者

你点的每个“在看”,我都认真当成了喜欢

再见,Python 2.x相关推荐

  1. 再见 Python,Hello Julia!

    作者 | Rhea Moutafis 译者 | 苏本如,责编 | 夕颜 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 随着Python的停滞不前,一个新的热门竞争对 ...

  2. 再见, Python, 你好, Julia

    点击上方"Python高校",关注你的技术大学 来自:雷锋网公众号 随着 Python 的停滞不前,一个新的热门竞争对手出现了. 不要误解.Python 的受欢迎程度,仍然得到计算 ...

  3. python实现sql数据处理_再见Python, 你好SQL

    原标题:再见Python, 你好SQL 雄凌求职:专注求职内推.金融名企实习内推的教育平台.可内推投行部.研究部门.互联网.私募.基金.四大.咨询等实习和工作岗位.专注大学生背景提升.工作求职.留学申 ...

  4. 再见Python!Yann LeCun警告:深度学习需要新编程语言

    整理 | 一一 出品 | AI科技大本营 尽管工程师们普遍定位 Python 是简单.优雅的编程语言,但它并非毫无缺点,比如人们一直吐槽它的执行速度不够快,线程不能利用多 CPU 等缺点,如今 AI ...

  5. python3 上传文件到目标机器_再见Python 2.7,你好Python 3.7

    安装python3 直接下载安装 1.下载地址如下:python 3.7 2.点击下载好的pkg文件进行安装 3.安装完成之后,python 3.70的默认安装路径如下: /Library/Frame ...

  6. 再见python你好go语言_再见Shell,你好Python

    我最终还是决定放弃Shell,转而使用Python.这是为什么呢?来看看这篇博文,和我一起讨论吧! 作为一名职业程序员,我有多年编写Shell脚本的经验.你可能现在跟我面临着类似的情况.在Shell取 ...

  7. 再见 Python!Yann LeCun 警告:深度学习需要新编程语言

    整理 | 一一 出品 | AI科技大本营 Python 全栈工程师系统学 https://edu.csdn.net/topic/ai30?utm_source=csdn_bw 尽管工程师们普遍定位 P ...

  8. 再见python,你好Java

    本文内容不针对python,爬虫,Java,易语言,仅为个人观点,欢迎讨论. 杂乱无章,入门既是入坟 大家好,我是xsir161,很高兴你能看到我的文章.自我介绍一下,我是一名物联网专业的学生.第一次 ...

  9. 再见Python!数据分析可以这样做。

    大家好,我是小五

  10. 再见PDF提取收费!我用100行Python代码搞定!

    点上方"菜鸟学Python",选择"星标" 第471篇原创干货,第一时间送达 大家在日常的工作和学习过程中,都少不了与PDF文件打交道,很多的小伙伴都面临着将P ...

最新文章

  1. synchronized同时对原子性、可见性、有序性的保证
  2. mysql-笔记-数据类型
  3. mysql语句中%代表什么_常用的Mysql语句你知道多少?
  4. c++中CreateEvent函数解析(1)
  5. mime java_MIME - Wei_java - 博客园
  6. 推荐几个配色和图标网站
  7. oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别
  8. Vue写的一个网站项目
  9. 魔兽局域网协议UDP部分详细解释
  10. 火狐开发----如何快速的安装火狐XPI文件
  11. vm虚拟机搭建click house(单机)
  12. JAVA结合AE(Adobe After Effects),通过解析AE源文件AEPX,替换素材,渲染合成,转码等操作
  13. 大白菜无法打开计算机硬盘,大白菜pe系统检测不到硬盘怎么办?
  14. springboot 整合谷歌 gRPC
  15. 2020家用千兆路由器哪款好_家用千兆路由器哪款好(2020年千兆路由器排行榜)...
  16. QListWidget动态添加内容,交换两行内容
  17. CornerNet,CenterNet关键代码解读: kp,_decode,left pooling
  18. Java(web)项目安全漏洞及解决方式【面试+工作】
  19. Linux系统网络基础
  20. EXCEL——逻辑函数,信息类函数

热门文章

  1. Scala 深入浅出实战经典 第88讲:Scala中使用For表达式实现map、flatMap、filter
  2. Android入门——电话拨号器和4种点击事件
  3. Error Creating Control when creating a custom control
  4. ajax合并表单,ajax。表单
  5. 易语言静态连接器提取_易语言静态编译链接器切换工具
  6. 微信小程序----调用用户信息
  7. 【07月01日】A股滚动市净率PB历史新低排名
  8. bzoj1036: [ZJOI2008]树的统计Count 树链剖分
  9. ajax post 参数说明
  10. 告别无止境的增删改查:Java代码生成器