
Python 2就要和我们说再见了!
因此,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 这个程序可检查项目依赖项,看看有没有依赖项在阻止使用Python 3。使用该程序来查是否需要换掉任何使用Python 2.x的库。在这种情况下,有必要访问该库主页,看看是否有计划移植到3。
2to3 这个Python程序试图将2.x源代码转换成3。它通常与Python解释器一起安装为脚本。如果只想看看它对源代码进行的每次变更有何差异,不用编写任何更改就可以运行该程序。注意这不完美,仍需要手动修复一些代码。
· 迁移不是一种选择如果无法将代码库迁移到Python 3,另一种选择是出钱请商业公司来支持Python 2。
至少有一家公司已经宣布推出Python 2支持软件包和Python 2第三方软件包。
一些Linux发行版包含Python 2,报废后仍会得到支持。比如说CentOS 7和Debian 10都使用Python 2,一直支持到2024年,但不知道到时这种支持是什么样的。
· 改进的机会维护是任何软件开发生命周期(SDLC)的重要环节。该环节的一方面是改进软件性能、增强安全性,这两者都可以通过升级到Python 3来实现。
换句话说,如果你仍在使用Python 2,这正是改进你如何管理软件依赖项,并尽量减少安全债务的大好机会。
· 不要忽视风险如果决定报废后继续使用Python 2,也就接受了使用不受支持的软件带来的种种风险,却明知道可以使用安全的版本。
Python 2如何转移到python3
如今 Python 已经被广泛应用于 Google、Facebook、Netflix 等实践的生产环境中,也横扫了各大编程语言排行榜,对此,更有人预估,其可能在未来几年内超越 C 和 Java,成为无可争议的编程语言领导者。那么对于普通的开发者而言,又该如何丢弃 Python 2.x 版本,向 Python 3.x 版本移植?基于此,NCSC 给出了如下的一些程序、教程和书籍,希望对大家有所裨益:
-
「Can I Use Python 3」(https:///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:///benjaminp/six)是一个 Python 2 和 3 兼容库,为开发者提供了编写与 Python 2 和 3 都兼容的代码。使用该库,开发人员可以选择使用哪个版本的 Python 解释器来运行代码。如果你决定使用该库,确保代码表明了这一点:Python 版本号可能很快增加到 4.0(截至本文发稿时最新版本为 3.7.4)。
-
利用他人的经验来帮助你——很多人已讲述了移植代码库方面的经验。Dropbox 在 2018 年将代码库迁移到 Python 3,撰写了一篇博文详细介绍了经验(https:///tech/2018/09/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever/)。
-
Python 官网(https://docs.python.org/3/howto/pyporting.html)。

















