作者丨王文婧
昨日,据 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
由于修复这些问题可能会破坏现有代码,而几乎所有为 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 3 ;Should I use Python 2 or Python 3 for my development activity? )但无论如何, Python 2.x 仍有一群忠实粉丝。现在,是他们该做出选择的时刻了。
领取专属 10元无门槛券
私享最新 技术干货