写点什么

官方:Python 2 将于 2020 年 1 月 1 日正式退出历史舞台

2019 年 8 月 30 日

官方:Python 2 将于2020年1月1日正式退出历史舞台

昨日,据 Python 开发团队最新消息,Python 2 将于 2020 年 1 月 1 日正式退出历史舞台的消息已实锤。官方表示,“我们决定,2020 年 1 月 1 日将是 Python 2 正式‘退休’的日子。这意味着我们不会在这之后进行任何改进,即便有人发现它存在安全问题。所以,您应该尽快升级到 Python 3。”

近日,英国国家网络安全中心(NCSC)同样建议开发者放弃使用 Python 2 。随着 Python 2 生命周期截止日的迫近,英国国家网络安全中心(NCSC)担心继续使用不受支持的模块存在数据安全的风险,因为 Python 核心开发人员即将不再提供该版本的安全更新。尽管用户仍可选择向第三方付费继续使用 Python 2 ,但目前已有许多项目停止了对 Python 2 的支持(包括 TensorFlow、Requests、scikit-learn、Apache Spark、pandas 等等)。所以,Python 2.x 的用户们,是时候将目光转向 Python 3 了。



自 2008 年发布以来,Python 2.0 已经走过了十多个年头。它的最后一次重大更新 Python 2.7 是在 2010 年。Python 2.x 是一个优异的语言版本,但与此同时也带来了相当大的历史包袱。lexy munroe 在博客中悉数列举了它的缺陷,“ 例如,它有两种整数类型;存在恼人的 Unicode 编码问题;它混淆了懒惰和渴望的功能工具;它有一个标准的库,但加载内存非常庞大;它自诩的强类型,却有偶尔令人啼笑皆非的运算结果 None < 3 < “2”。总的来说,它的一些“阴暗角落“,包含了 Python 1 时代太多的历史包袱。“


由于修复这些问题可能会破坏现有代码,而几乎所有为 2.0 编写的代码仍可在 2.7 上运行。因此,一个不太兼容的新版本 Python 3 应运而生。设计之初,Python 3 的预期是用户会直接转移到新版本,从而放弃使用 Python 2 。而实际上,大多数的库希望同时在 Python 2 和 Python 3 上运行,这在一开始很难运作。众多周知,Python 社区对变革的抵抗力总是很强。 Python 3.0 在 2008 年 12 月发布后,花了整整四年时间,直到 2013 年 1 月,它的月下载量才超过 Python 2 。


意识到许多用户仍在使用 Python 2 ,Python 的开发人员已经将对 Python 2.7 的支持从 2015 年延长到了 2020 年。由于开发人员仅修复错误,并把所有新功能仅限在 Python 3 上使用,许多项目已经减少了对 Python 2.7 的支持。


现在, PyPI 的大部分流行软件包都可以在 Python 2 和 3 上运行,而且每天都会添加新的软件包。此外,许多关键的 Python 项目已承诺将尽快停止对 Python 2 的支持。



停止支持 Python 2 的项目时间表



Python 各分支的状态


根据 JetBrains Python 开发者调查,绝大多数用户(84%)已经改用 Python 3 。其中, 54% 使用 Python 3.6 , 30% 使用 Python 3.7 。


看起来,结论似乎显而易见,你应该开始使用 Python 3 了 ,因为它才是 Python 的未来!


然而,事实上,对 Python 版本的选择取决于公司的实际应用情况。目前仍有不少银行和金融公司使用 Python 2.7 。去年,当 Python 宣布 Python 2 将于 2020 年正式结束时,Hacker News 用户就曾表示业内数百万人仍在使用 Python 2.7 。


让我们再看一组最新数据,根据  Python Package Index 的调查结果,在十大流行 Python 包中,前四个软件包的 Python 2 下载量比 Python 3 还要大,甚至 Python 3 更受欢迎的大部分软件包仍适用于 Python 2 。



本月早些时候, PyPy 表示,只要 PyPy 存在,他们就不打算放弃对 Python 2.7 的支持。外媒 Packt Hub 解读,这种对 Python 2 的偏爱不仅仅是因为 PyPy 的第一个版本是 Python 2 实现, Python 3 最近才进入这一版本,这也是 PyPy 生态系统的关键部分,RPython 是一个动态语言实现框架,它的基础就是 Python 2 。



因此,Python 2 的离场也会带来一些问题。英国国家网络安全中心(NCSC)研究员 Rich M 在官方博客中总结出以下几点:


1.依赖项


正如前文所说,像 Numpy , TensorFlow 这样的流行项目已经承诺 2020 年停止支持 Python 2.x 。这意味着如果你想使用你喜欢的模块的最新功能,就必须使用 Python 3 。等待更新的时间越长,更改的依赖项的 Python 3 版本就会越多,更新就会更困难。


2.可能阻碍其他开发人员


如果你维护其他开发人员所依赖的库,则可能会阻碍其更新到 Python 3。这意味着你在无形中增加其他开发人员的安全风险。你也许不在组织外部发布任何代码,但要考虑可能在内部使用你的代码的同事。


3.错过新功能


Python 3 有许多 Python 2 用户没有尝试过的新功能,包括:


  • 表达式的好处:允许生成器将其部分操作委托给另一个生成器。

  • Unicode字符串:Unicode 更易于处理。

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

  • 视图和迭代器而非列表:一些众所周知的 API 不再返回列表。例如,字典返回键、值的视图或二者的视图。

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

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

  • 关键字实:允许实参在 varargs 实参后出现。

  • F字符串:在运行时计算的一种新类型的字符串常量,可包含任何有效的 Python 表达式。

  • 大量的加速和优化


英国国家网络安全中心(NCSC)近日将现有应用程序中的安全风险和可能发生的代码破坏列为用户需要尽快弃用 Python 2 的主要原因。该机构警告说,那些不为迁移到 Python 2.x 投资的公司最终可能面临和 Equifax 或 WannaCry 同样的处境。“在知道有可用的安全版本的情况下,仍铤而走险,决定在生命周期结束后继续使用 Python 2 ,您将需要承担使用不受支持的软件带来的所有风险。”


为了方便用户过渡, Python 团队也提供了各种信息丰富的指南。(例如:Porting Python 2 Code to Python 3Should I use Python 2 or Python 3 for my development activity?)但无论如何, Python 2.x 仍有一群忠实粉丝。现在,是他们该做出选择的时刻了。


相关文章:


Time to shed Python 2


UK cybersecurity agency warns devs to drop Python 2 due to looming EOL & security risks


2019 年 8 月 30 日 20:5510046
用户头像
王文婧 InfoQ编辑

发布了 126 篇内容, 共 61.4 次阅读, 收获喜欢 251 次。

关注

评论

发布
暂无评论
发现更多内容

图解JavaScript——代码实现(new、Object.create()、Object.assign()、flat()等十四种代码原理实现不香吗?)

执鸢者

Java 前端 代码原理

翻译: Effective Go (5)

申屠鹏会

golang 翻译

推荐一个替代印象笔记,onenote的神奇笔记!

申屠鹏会

笔记

智“营”时代,众盟科技荣膺“2020毕马威中国领先消费科技TOP50企业榜单”

人称T客

面试造火箭,看下这些大厂原题

前端有的玩

Java 前端 面试题

网站改版神秘公式,教你躲避改版陷阱

北柯

创业 网站 网站搭建 网站改版

IT人的身体健康

隆隆

IT人健康

SpringBoot系列(四):SpringBoot特性_外部化配置(properties文件配置)

xcbeyond

Java 微服务 springboot

简谈Python3关键字nonlocal使用场景

王坤祥

Python Python基础

troubleshoot之:分析OutOfMemoryError异常

程序那些事

Java JVM 异常 JIT

AI能写浙江高考满分作文了!在线满分作文生成器,一键圆你满分梦

程序员生活志

AI

腾讯人均月薪7.5w,我这是又被平均了?

程序员生活志

腾讯 职场 薪资

浅谈技术管理者的角色认知与自我管理

大黄蜂

团队管理 管理 自我管理 技术管理

二叉查找树-增删查和针对重复数据的 Java 实现

多选参数

数据结构 算法 二叉树 数据结构与算法

架构师训练营 - 第 7 周学习总结

红了哟

MySQL explain 中的 rows 究竟是如何计算的?

架构精进之路

MySQL

MySQL备份脚本,应该这么写

Simon

MySQL

队列高级应用之设计一个高性能线程池

架构师修行之路

分布式 线程池 架构设计 架构师

HashMap、LinkedHashMap 学习笔记

陈俊

如何做好技术选型

xcbeyond

Java 架构 最佳实践 技术选型

简谈Python3中的闭包

王坤祥

Python Python基础

简述Python中变量作用域的规则

王坤祥

Python python升级 Python基础

第10周总结+作业

林毋梦

敏捷软件工程实践书籍

Bob Jiang

敏捷 敏捷书籍 工程实践

Rust竟然没有异常处理?

袁承兴

rust 异常 java异常处理

Phalcon注解学习

半亩房顶

php phalcon

年近而立,Java何去何从?

华为云开发者社区

Java 程序员 编程语言 开源代码 Bugayenko Yegor

一瓶可乐的自动售货机指令“旅程”

华为云开发者社区

物联网 嵌入式 华为云 数据传输 无线通信

一口气搞懂「文件系统」,就靠这 20 张图了

小林coding

操作系统 计算机基础 文件管理 文件存储 文件系统

面试官:说下对cookie,session,Token的理解

Java小咖秀

Java Java 面试

领域驱动设计(DDD)实践之路(二):事件驱动与CQRS

vivo互联网技术

DDD 架构设计 CQRS

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

官方:Python 2 将于2020年1月1日正式退出历史舞台-InfoQ