是时候对 Python2 说拜拜了

作者:Rich M 英国国家网络安全中心(NCSC)的平台安全研究员。

别再约束自己了,Python 2 在 2020 年寿终正寝。

Python 2 的报废(EOL)日期迟迟未到,不过现在终于有了眉目。自 2020 年 1 月 1 日起,Python 2 将不再得到支持。Python 的核心开发人员将不再提供错误修复版或安全更新。

因此,如果你仍在使用 Python 2.x,是时候将代码移植到 Python 3 了。如果你继续使用未得到支持的模块,可能危及贵企业及数据的安全性,因为无人修复的漏洞迟早会出现。

问题的严重性

下面这张表列出了十个流行的 Python 软件包及统计数据,来自 Python 社区开发和共享的软件的存储中心 Python Package Index。

表中每个软件包每月下载量达数百万次。本文中的数据来自 2019 年 6 月。

正如你所见,大多数下载的软件包仍针对 Python 2.x 版本。在最好的情况下,Web 应用程序框架 Flask 主要是针对 3.x 而下载的。但即使如此,仍有近三分之一的下载仍针对 2.x.

即使这些下载中只有一部分用于实际项目,Python 2 报废仍可能影响数百万系统的安全性。

Python 2 消亡带来的问题

Python 2 报废带来了许多问题,这里是你可能会遇到的几个问题。

依赖项

NumPy、Requests 和 TensorFlow 等许多大受欢迎的项目承诺到 2020 年将停止支持 2.x,一些项目已经这么做了。

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

你可能阻碍其他开发人员

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

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

你错失最新功能

Python 3 有许多你错失的新功能,包括如下:

  • 来自表达式的好处允许生成器将其操作的一部分委托给另一个生成器。
  • 统一编码字符串统一编码处理起来更容易。
  • 打印函数打印函数有额外的功能,因而使其更灵活。
  • 视图和迭代器取代列表一些众所周知的 API 不再返回列表。比如说,字典返回键的视图、值的视图或两者的视图。
  • multi-with语句复杂的 with 语句更易于阅读。
  • 使用*和**解包扩大了*可迭代解包运算符和**字典解包运算符的用途。现在可以在函数调用中使用任意数量的解包运算符。
  • 纯关键字实参允许实参出现在可变长度(varargs)实参的后面。
  • F字符串运行时评估的一种新类型的字符串常量,可能含有任何有效的 Python 表达式。
  • 大量的加速和优化机制。

Python 3.0 发布时,一些新功能向后移植到 Python 2.7,可能很熟悉。如果你一直坚持使用 2.6 或更低版本,这些新功能对你来说可能很陌生。

帮助开发人员

将 Python 2.x 代码移植到 Python 3 可能是很艰巨的过程。幸好,一些工具和资源可以使这个过程较容易。

Can I Use Python 3(https://github.com/brettcannon/caniusepython3)这个程序可检查你的项目依赖项,看看有没有依赖项在阻止你使用 Python 3。使用该程序来查看你是否需要换掉任何使用 Python 2.x 的库。在这种情况下,有必要访问该库主页,看看是否有计划移植到3。

2to3(https://docs.python.org/2/library/2to3.html)这个 Python 程序试图将 2.x 源代码转换成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 官网还提供了你可能觉得有用的说明文档。

迁移不是一种选择

如果无法将代码库迁移到 Python 3,另一种选择是出钱请商业公司为你支持 Python 2。

至少有一家公司已经宣布推出 Python 2 支持软件包和 Python 2 第三方软件包。

一些 Linux 发行版包含 Python 2,报废后仍会得到支持。比如说,CentOS 7 和 Debian 10 都使用 Python 2,一直支持到 2024 年,但不知道到时这种支持是什么样的。

改进的机会

维护是任何软件开发生命周期(SDLC)的重要环节。该环节的一方面是改进软件性能、增强安全性,这两者都可以通过升级到 Python 3 来实现。

换句话说,如果你仍在使用 Python 2,这正是改进你如何管理软件依赖项,并尽量减少安全债务的大好机会。

不要忽视风险

我们 NCSC 始终强调打补丁的重要性。打补丁并非总是易事,但这是你为了确保技术安全所能做的最基本工作之一。

WannaCry 勒索软件就是一个典例,它表明了如果你运行不受支持的软件会发生什么。它感染了超过 230000 台计算机,在全球范围内重大破坏。最近,Equifax 泄密事件导致高达达 7 亿美元的和解。

如果决定报废后继续使用 Python 2,你就接受了使用不受支持的软件带来的种种风险,却明知道可以使用安全的版本。

但愿本文有助于说服你现在是时候开始迁移到 Python 3 了。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

触发修改文章时间【fastadmincms开发记录】|fastadmincms二次开发,触发,修改,文章,时间,fastadmin,ms,开发,记录
触发修改文章时间【fastadmincms开发记录】
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】|fastadmincms二次开发,在tp5中,过滤,输入,的零,宽度,字符,fastadmin,ms,开发,记录
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】
处理tag标签中的0宽空格【fastadmincms开发记录】|fastadmincms二次开发,处理,tag,标签,中的,0宽,空格,fastadmin,ms,开发,记录
处理tag标签中的0宽空格【fastadmincms开发记录】
添加专题时tags标签id出错【fastadmincms开发记录】|fastadmincms二次开发,添加,专题,时tags,标签,id,出错,fastadmin,ms,开发,记录
添加专题时tags标签id出错【fastadmincms开发记录】
20230518----模板 广告【fastadmincms开发记录】|fastadmincms二次开发,20230518,模板,广告,fastadmin,ms,开发,记录
20230518----模板 广告【fastadmincms开发记录】
cms添加视频模型【fastadmincms开发记录】|fastadmincms二次开发,ms,添加,视频,模型,fastadmin,开发,记录
cms添加视频模型【fastadmincms开发记录】
新增单篇收费复制功能【fastadmincms开发记录】|fastadmincms二次开发,新增,单篇,收费,复制,功能,fastadmin,ms,开发,记录
新增单篇收费复制功能【fastadmincms开发记录】
添加开会员折扣功能【fastadmincms开发记录】|fastadmincms二次开发,添加,开会,折扣,功能,fastadmin,ms,开发,记录
添加开会员折扣功能【fastadmincms开发记录】

历史上的今天:05月02日

热门专题

开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招
国家开放大学|国家开放大学报名,国家开放大学报考,国家开放大学,什么是国家开放大学,国家开放大学学历,国家开放大学学费,国家开放大学报名条件,国家开放大学报名时间,国家开放大学学历,国家开放大学专业
国家开放大学
云南高职单招|云南单招,云南单招网,云南高职单招网,云南高职单招,云南单招学校,云南单招培训
云南高职单招
一年制中专|中专学历,中专是什么学历,中专是什么,中专有什么专业,中专升大专,一年制中专
一年制中专
安徽中源管业|安徽中源管业,安徽中源管业mpp电力管,安徽中源管业cpvc电力管,安徽中源管业pe穿线管,安徽中源管业电力管,安徽中源管业排水管,安徽中源管业通信管,安徽中源管业管材
安徽中源管业

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部