当前位置: 首页 > 科技观察

英国国家网络安全中心(NCSC)平台安全研究员RichM是时候和Python2说“再见”了

时间:2023-03-18 15:14:30 科技观察

  别再克制自己了,Python2将在2020年达到生命周期的尽头。  Python2的生命周期结束(EOL)日期早就该到了,但现在它终于来了。从2020年1月1日开始,将不再支持Python2。Python的核心开发人员将不再提供错误修复或安全更新。  因此,如果您仍在使用Python2.x,是时候将您的代码移植到Python3了。如果您继续使用不受支持的模块,您可能会危及您的业务和数据的安全性,因为迟早会出现错误将出现未打补丁的情况。  问题的严重性  下表列出了十个流行的Python包,其中包含来自Python包索引的统计数据,Python包索引是Python社区开发和共享的软件存储库。  表格中的每个包每月都有数百万的下载量。本文中的数据是2019年6月的数据。  可以看到,大部分下载的包还是针对Python2.x版本的。在最好的情况下,Web应用程序框架Flask主要是3.x的下载。但即便如此,近三分之一的下载仍以2.x为目标。  Python2的消亡问题  Python2的消亡带来了很多问题,以下是您可能会遇到的一些问题。  Dependencies  NumPy、Requests和TensorFlow等众多热门项目已承诺到2020年停止支持2.x,有些项目已经这样做了。  这意味着如果你想使用喜欢的模块的最新功能,你需要使用Python3。你等待更新的时间越长,届时Python3版本的依赖项将发生变化,越难将要更新。  您可以阻止其他开发人员  如果您正在维护其他开发人员所依赖的库,您可能会阻止他们更新到3。通过阻碍其他开发人员,您间接地并且可能无意中增加了安全风险其他的项目。  您不得在公司外部发布任何代码,但要考虑可能也在公司内部使用您代码的同事。  你错过了最新的特性  Python3有许多你错过的新特性,包括以下内容:表达式的好处-允许生成器将其部分操作委托给另一个生成器。Unicode字符串-Unicode更容易处理。打印功能-打印功能具有附加功能,因此更加灵活。视图和迭代器而不是列表——一些著名的API不再返回列表。比方说,字典返回键、值或两者的视图。“multi-with”语句——复杂的with语句更容易阅读。使用*和**拆包–扩展了*iterable拆包运算符和**dictionary拆包运算符的用途。现在可以在函数调用中使用任意数量的解包运算符。纯关键字参数-允许参数出现在可变长度(varargs)参数之后。F-strings-一种在运行时评估的新型字符串常量,它可能包含任何有效的Python表达式。许多加速和优化机制。  Python3.0发布时,一些新特性被反向移植到Python2.7,大家可能很熟悉。如果您一直坚持使用2.6或更低版本,这些新功能对您来说可能是新的。  帮助开发人员  将Python2.x代码移植到Python3可能是一个艰巨的过程。幸运的是,一些工具和资源可以使这个过程更容易。  CanIUsePython3(https://github.com/brettcannon/caniusepython3)这个程序会检查你的项目依赖关系,看看是否有任何依赖关系阻止你使用Python3。使用这个程序看看你是否需要替换任何使用Python2.x的库。在这种情况下,值得访问图书馆主页,看看是否有移植到3的计划。  2to3(https://docs.python.org/2/library/2to3.html)这个Python程序试图将2.x源代码转换为3。它通常作为脚本与Python解释器一起安装。如果您只是想看看它对源代码所做的每一次更改有何不同,您可以运行该程序而无需编写任何更改。请注意,这并不完美,您可能仍需要手动修复一些代码。  《支持 Python 3:深入指南》(http://python3porting.com/)这本免费的开源电子书将指导您逐步完成添加Python3支持的过程。这本电子书解释了您可能遇到的一些常见迁移问题,并列出了使用Python3中的新功能改进源代码的方法。  Six(https://github.com/benjaminp/six)是一个Python2和3兼容库,允许开发人员轻松编写与Python2和3兼容的代码。使用这个库,开发人员可以选择使用哪个版本的Python解释器来运行他们的代码。如果您决定使用该库,请确保代码表明了这一点:Python版本号可能很快会增加到4.0(撰写本文时为3.7.4)。  利用其他人的经验来帮助您-许多人都谈到了移植代码库。Dropbox在2018年将代码库迁移到Python3,写了一篇博文(https://blogs.dropbox.com/tech/2018/09/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever/)详细介绍了体验。  Python官方网站也提供了您可能会觉得有用的文档。  迁移不是一个选项  如果你不能将你的代码库迁移到Python3,另一种选择是支付一家商业公司为你支持Python2。  至少有一家公司发布了Python2支持包和Python2第三方包。  一些Linux发行版包括Python2,它在停用后将继续得到支持。例如,CentOS7和Debian10都使用Python2,它将支持到2024年,但不知道届时支持会是什么样子。    改进机会  维护是任何软件开发生命周期(SDLC)的重要组成部分。这个链接的一个方面是提高软件性能和增强安全性,这两者都可以通过升级到Python3来实现。  换句话说,如果你还在使用Python2,这是一个很好的机会来改进你如何管理软件依赖关系并最大限度地减少安全债务。  不要忽视风险  我们在NCSC一直强调打补丁的重要性。修补并不总是那么容易,但它是您可以为确保技术安全所做的最基本的事情之一。  WannaCry勒索软件是运行不受支持的软件时可能发生的情况的典型示例。它感染了超过230,000台计算机,并在全球范围内造成了严重破坏。最近,Equifax泄密导致高达7亿美元的和解。  如果您决定在退休后继续使用Python2,您将接受使用不受支持的软件的风险,并且知道您可以使用安全的版本。  我希望这篇文章能让你相信现在是开始迁移到Python3的时候了。