导读:如果你仍在使用 Python 2.x,那么是时候将你的代码移植到 Python 3 了。

本文经授权转自公众号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(信息泄露)事件的发生。

01 Python 的应用现状

而论及 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 出现了一个经常被开发者们诟病的问题,即于 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 版本的开发支持。

不过,想要继续使用旧版本也并非不可,就如同 Java 一样,交付商业费用即可,但这样的做法在日新月异的技术圈中,显然不是长久之计。

如今 NCSC 的警醒,再次告诫开发者们,“如果继续使用不受支持的模块,公司就会冒着组织和数据的安全性风险,因为漏洞迟早会出现,而且没人会修复。”

与此同时,来自 NCSC 的平台安全研究员 Rich M 也于官方博客上列举了不升级 Python 2 将面临的种种问题:

1. 依赖项

许多流行的项目,如 NumPy、Requests 和 TensorFlow 等承诺到 2020 年将停止支持 2.x,并且当前一些项目已经这么做了。

这意味着如果你想使用你喜欢模块的最新功能,那么就需要使用 Python 3。等待更新的时间越长,到时将更改的依赖项的 Python 3 版本会越多,更新起来会变得越困难。

2. 或将阻碍其他开发者

如果你正在维护其他开发者所依赖的库,则可能会阻止他们更新到 Python 3。如果阻碍其他开发者,你会在间接、可能无意中加大其他项目面临的安全风险。

你也许不在公司外部发布任何代码,但要考虑可能也在内部使用你代码的同事。

3. 错失最新的 Python 功能

  • 表达式的收益——允许生成器将其部分操作委托给另一个生成器。

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

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

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

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

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

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

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

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

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

那么对于普通的开发者而言,又该如何丢弃 Python 2.x 版本,向 Python 3.x 版本移植?基于此,NCSC 给出了如下的一些程序、教程和书籍,希望对大家有所裨益:

1. 「Can I Use Python 3」

https://github.com/brettcannon/caniusepython3

是一个程序,它可以检查你项目的依赖项,看看有没有依赖项在阻止你使用 Python 3。使用该程序来查看你是否需要换掉任何使用 Python 2.x 的库。在这种情况下,有必要访问该库主页,看看是否有计划移植到 Python 3。

2. 「2to3」

https://docs.python.org/2/library/2to3.html

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

3. 《支持Python 3:深入指南》

http://python3porting.com/

是一本免费的开源电子书,可指导你完成添加 Python 3 支持的过程。本书解释了你可能遇到的一些常见迁移问题,并列出了使用 Python 3中 的新功能改进源代码的方法。

4. 「Six」

https://github.com/benjaminp/six

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

5. 利用他人的经验来帮助你

很多人已讲述了移植代码库方面的经验。Dropbox 在 2018 年将代码库迁移到 Python 3,撰写了一篇博文详细介绍了经验:

https://blogs.dropbox.com/tech/2018/09/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever/

6. Python 官网

https://docs.python.org/3/howto/pyporting.html

基于此,你会放弃 Python 2.x 吗?

参考:

https://www.ncsc.gov.uk/blog-post/time-to-shed-python-2

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

有话要说?

Q: 你在用哪个版本的Python?

欢迎留言与大家分享

猜你想看?
  • 数据分析与数据化运营的关键知识点,全在这里了

  • 如何在 Apache Flink 中使用 Python API?

  • 解读人工智能、大数据和云计算的关系,大佬们赌AI竟都输了?

  • 身高2m,体重2kg,这样的数据“看上去很好”?

更多精彩?

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 报告 | 读书 | 书单 | 干货 

大数据 | 揭秘 | Python | 可视化

AI | 人工智能 | 5G | 区块链

机器学习 | 深度学习 | 神经网络

合伙人 1024 | 段子 | 数学 | 高考

据统计,99%的大咖都完成了这个神操作

?

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

和 Python 2.x 说再见!相关推荐

  1. python 环境管理工具_再见 virtualenv!K神教你轻松管理多个Python环境

    原标题:再见 virtualenv!K神教你轻松管理多个Python环境 超级无敌干货第一时间推给你!!! 小编电脑上有多个 Python 开发环境,每次都是用 virtualenv 创建一个 Pyt ...

  2. python骨灰技巧_再见,Python!骨灰级程序员:用对这个方法,编程能力暴增!

    结合我最近这些年的 Python 学习.开发经验,发现近90%的程序员在学 Python 时都会遇到下面这3个问题: 1.想学Python,但不知从何学起,应用方向太多了也不知道该选择什么方向... ...

  3. python excel操作库,可能是全网最完整的 Python 操作 Excel库总结!

    openpyxl xlrd/xlwt xlwings xlsxwriter 了解各个库的异同,从而在不同场景下可以灵活使用 首先让我们来整体把握下不同库的特点 " xlrd xlwt xlu ...

  4. 昨晚,我用python帮学妹P证件照自拍,然后发现。。。

    人生苦短,我用Python 前因后果 先上效果 准备工作 证件照尺寸调整 证件照背景调整 各种背景颜色图片 完整代码 结尾 最后 前因后果 事情是这样的 晚上我正在聚精会神写代码(打游戏~) 突然,收 ...

  5. 疫情期间自我提升指南:十大资源,为你铺平数据科学家之路!

    来源:大数据文摘 本文约2800字,建议阅读7分钟 本文为你带来了十大资源,更为你安排好了学习顺序,网课刷起来! 疫情在家太无聊,网课自然是打发时间又能自我提升的不二之选.在众多学科中,数据科学又可说 ...

  6. @程序员,一文掌握 Web 应用中的图片优化技巧!

    作者 | fecoder 责编 | 郭芮 这篇文章,我们将一起探讨,Web应用中能对图片进行什么样的优化,以及反思一些"负优化"手段. 为什么要对图片进行优化? 对于大多数前端工程 ...

  7. Google 搜索点击量不到 50%?

    谷歌在搜索领域的垄断地位毋庸置疑.几乎美国的所有移动设备上都安装着谷歌地图应用.谷歌搜索应用和YouTube--如果将它们的搜索统计数据包括在内的话,那么谷歌的真正市场份额将达到97%以上.但是最新的 ...

  8. 马云马斯克激辩:AI 是威胁还是被低估了?

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导语:2019 年 8 月 29 日,世界人工智能大会(WAIC)在上海正式拉开帷幕.开幕式上,最让人瞩目的莫过于阿里巴巴前 CE ...

  9. 雷军:小米有机会重返世界前三;苹果为 Siri 泄露隐私事件致歉;Apache Tomcat 9.0.24 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

最新文章

  1. rabbitmq的整体架构一览
  2. linux编译器项目,编译器架构 LLVM
  3. 【华为云技术分享】云容器引擎 CCE权限管理实践
  4. [SQL SERVER] 优化SQL Server 2000的设置
  5. eureka 注册中心高可用失败,没有互为副本
  6. [3D数学基础:图形与游戏开发]读书笔记 第10章(3D中方位与角位移)
  7. gin框架01--快速入门gin框架
  8. 数据结构——栈(链栈)
  9. 什么样的团队才是理想中的团队? (转自AtTeam官微的博客)
  10. python求平方函数图像_求平方 python
  11. 10、《送陈秀才还沙上省墓》-明·高启
  12. 别用cmd了,配置一个比Mac终端还美的Windows Terminal——详细教程
  13. SolidWorks如何编辑今日制造插件生成的齿轮
  14. JS实现文档下载兼容谷歌、火狐、IE
  15. Ubuntu下安装配置gitLab(一)
  16. C++ QT开发人机象棋(界面表示)
  17. 教你羊肉炒菠菜的做法
  18. 【实战HTML5与CSS3】免费制作威客页面啦(附源码)
  19. 慕容话币|新手如何进入区块链行业?
  20. 计算机没有安装显卡驱动能显示桌面吗,电脑安装了显卡驱动后显示不了怎么处理...

热门文章

  1. 7.3图的遍历(深度优先)-理论
  2. matlab卷积完为什么要归一化,为什么要进行反归一化处理,而且反归一化什么意思?...
  3. docker 本地部署 mysql_Docker 部署Mysql 服务和Redis 服务的方法
  4. java dump分析工具_Java虚拟机详解(七)------虚拟机监控和分析工具(1)
  5. linux core文件乱码,.net core在linux下图片中文乱码
  6. python编辑器背景设置为黑色_VScode 配置为Python编辑器
  7. 计算机网络之传输层:1、概述(传输层功能、端口号、套接字、TCP、UDP)
  8. /proc/sys/vm虚拟内存参数
  9. LeetCode 542 01 矩阵
  10. C/C++的readdir和readdir_r函数(遍历目录)