AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

Python 2 寿命即将终结,在此之前你需要做些什么?

  • 2019-04-03
  • 本文字数:3321 字

    阅读完需:约 11 分钟

Python 2寿命即将终结,在此之前你需要做些什么?

Python 软件基金会宣布,到 2020 年元旦,将不再为编程语言 Python 2.x 分支提供任何支持。这一天将标志着一出延续多年的戏剧的高潮:Python 从较旧的、功能较弱的、广泛使用的版本过渡到更新的、更强大的版本。然而,Python 的新版本在采用上仍然落后于它的旧版本。未来几年里,还会有很多人继续使用 Python 2 编写的程序,当世界被 Python 3 迅速占领之时,受困于寿命终将终结的 Python 2,你应该怎么办?


现在,是时候了。与 Python 2 相比,Python 3 有着无数的技术和最终用户增强功能,但却未能永久取代 Python 2。PyPI 存储库中托管的大多数流行包都支持 Python 3(该库是可重用 Python 代码的第一站)。Python 3 现在已经成为许多 Linux 发行版默认的 Python 解释器。大多数最近出版的书籍、编码学院(coding academy)和在线课程都向初学者推荐了 Python 3。


现在的坏消息是,Python 2,就像 Windows 7(或 Windows XP),在未来的几年里,还将会伴随我们很长时间。我们中的许多人还将继续依赖于使用 Python 2 编写的应用程序。由于内部限制,我们中的一些人甚至还会继续将 Python 2 用于新的应用程序。如果这个世界正在被 Python 3 迅速占领,而你却受困于 Python2,这该如何是好呢?让我们来看看都有哪些选择吧!

Python 2 寿命终结意味着什么

关于 Python 2 走向 EOL(End of Life,寿命终止)的第一件事也是最重要的事情是:Python 2 应用程序仍将运行。不要认为这是千年虫的问题,Python 2 应用程序并不会在 2020 年 1 月 1 日全部神奇地停止运行。只是核心 Python 开发团队将不再对 Python 2 提供任何官方支持而已。


下面是 Python 2 EOL 在实际应用中的含义:


  • 将不再提供 Python 2 的官方 bug 修复和安全补丁。 核心开发团队将不会修复 Python 2 解释器或 Python 标准库中新发现的问题。但是,商业供应商可以自己维护 Python 2,而其他第三方可以对 Python 2 代码库进行分叉,并继续核心团队的工作。(稍后将更详细介绍)

  • 第三方 Python 项目将放弃 Python 2。 而那些同时支持 Python 2 和 Python 3 的库将开始把资源专门投入 Python 3。这些项目中有许多是志愿者运行的,只支持一种语言版本的话,工作量就要少得多。每个项目都将决定是否支持 Python 2,但许多主要的 Python 2 项目承诺到 2020 年才完全放弃对 Python 2 的支持。

  • 对 Python 2 的平台支持将会减弱。 Linux 发行版和云服务提供商可能会继续包含 Python 2 运行时。但随着时间的推移,预计对 Python 2 的支持将会逐渐减弱。几乎可以肯定的是,在云平台上仍然可以运行 Python 2 的容器化版本,但是不能保证云服务提供商将继续维护自己的 Python 2 容器。


如果你被困在 Python 应用程序中,那么如何应对缺少 Python 2 支持的情况?从长远来看,最好的办法是找到一种能够消除对 Python 2 所有依赖项的策略。但这只是众多选择中的一个。

从 Python 2 过渡到 Python 3

根据代码库的大小和外部依赖关系,将 Python 2 过渡到 Python 3 可能比你预期的更容易。Python 的官方文档有一些简单的步骤,你可以通过这些步骤来确定你的项目是否“永不过时”,也就是说,可以在 Python 3 中使用,只需很少的调整或者无需任何调整。你可以采取的最好的第一步就是,使用caniusepython3包来找出那些组件或依赖项(如果有的话)会阻止迁移。


如果你坚持使用 Python 2,是因为某个应用程序的某个特定组件只能在 Python 2 上才能用的话,那么就要从这个组件开始过渡。查看是否存在兼容 Python 3 的替代方案,然后从该点向外重建应用程序。这一想法是找出你对 Python 2 依赖所在的最小位置,并解决它们。


如果你必须以某种形式继续使用 Python 2,那么至少可以做的就是从迁移到最新版本的 Python 2(截止本文成稿时为 Python 2.7.16)开始,并将其作为 Python 3 的出发点。这样,你就可以从 Python 2.7 在其正式生命周期结束之前提供的 Bug 修复获益。

使用替代的 Python 2 运行时

如果修改 Python 2 代码库不是一个可行的建议,那么另一种选择是使用由第三方开发的不同的 Python 2 运行时。替代的 Python 2 运行时可能比 Python 2 本身具有更长的支持窗口。

Tauthon

https://github.com/naftaliharris/tauthon


据该项目的自述文件称,Tauthon 是 Python 2.7.16 的一个分支,具有从 Python 3.x 派生出来的新语法、内置函数和库。只要维护者能够提供,Tauthon 还包括为该语言提供修复和补丁。理论上,Tauthon 应该作为 Python 2.7 的替代品。截止本文成稿时的最新版本 Tauthon 2.8 就包括函数注释、强制关键词参数、async/await语法以及以前仅在 Python 3 中可用的其他功能。

PyPy

https://pypy.org/


PyPy 是 Python 的即时加速运行时,它使用 Python 2 作为其内部基础架构的关键部分,并且长期以来一直支持 Python 2 作为其主要版本。该项目的文档声称“由于 RPython(PyPy 的基础)构建在 Python 2 之上,而这种情况既不可能改变,也就是说,只要 PyPy 本身存在,那么 PyPy 的 Python 版本就会永远存在。”但 PyPy 可能会对一些依赖于 C 扩展的一些 Python 包造成兼容性或性能问题,尽管 PyPy 开发团队一直在努力解决这些问题。

IronPython

https://ironpython.net/


IronPython 是.Net 运行时的 Python 实现,它的 Python 2 版本仍然得到了主动的支持。它目前的开发人员名单已经宣布,他们为了将精力集中在 IronPython,因此不太可能在 2020 年后继续支持 Python 2。但是,这并不意味着其他人不能继续提供自己的支持。

Cython

https://cython.org/


另一种可能是 Cython,尽管支持窗口有限。Cython 将 Python 编译为 C,并提供可选的类型以增强功能。并且,从一开始就支持 Python 2。可以使用 Cython 将 Python 2 代码转换成 C,以继续作为“冻结的”二进制文件来使用。这样做甚至可以提高性能,这要取决于应用程序的性质。(主要是受 I/O 的限制,程序不会有太大的改进。)


不过,Cython 计划在今年年底放弃对 Python 2 的支持。除此之外,你将会陷入使用 Cython 的旧版本继续运行旧版本的 Python 脚本的困境。

购买扩展的 Python 2 支持

一个长期的解决方案是获得 Python 解决方案供应商的支持。ActiveState 是 ActivePython 发行版和 Komodo IDE 的创建者,为那些希望继续使用 Python 2 的客户,或者那些希望通过标识 Python 堆栈中必须在 Python 3 重写的部分来迁移到 Python 3 的客户提供支持。


一些供应商为 Python 2 提供支持,作为其在另一个受支持产品中的一部分。Red Hat 企业版 Linux 6 和 7 包含了 Python 2,因此,从 Red Hat 购买的针对这些版本的操作系统的任何支持合同都将包括在产品的支持生命周期内继续支持 Python 2。


第三种选择是向咨询公司或承包商购买支持。他们能够提供的支持程度会因你的需求和抱负而有所不同。它可能包括提出一个过渡计划来放弃 Python 2 并重写任何依赖的软件(可能是最好的长期策略),或者手动将 Phthon 2 的补丁合并到运行时的自定义构建中(这做法雄心勃勃,而且还很复杂)。

自己维护 Python 2

Python 是一个开源项目。你自己完全可以自由地实现任何需要的修复。如果修复是对 Python 标准库的修改,这通常不会太难,因为大多数 Python 标准库本身就是用 Python 编写的。但是如果你需要在标准库使用的 C 模块或 CPython 解释器进行更改,那将更具有挑战性。因为你需要了解 C 并熟悉 CPython 的内部结构才能做到这一点。

什么都不做

如果它没出故障,请不要试图去修复它。这是许多企业在 Windows NT 和 Windows 2000 寿命终止时所采用的策略。理论上,仅供内部使用且未公开到公共互联网的 Python 应用程序可以无限期运行。


虚拟机和容器化提供了在受控环境中保持这些类型的应用程序保持正常运行的方法。你可以将 Python 2 运行时的特定版本“冻结”到容器映像或者虚拟机中,以及它的标准库、应用程序所需的模块和应用程序本身。


也就是说,任何遗留的应用程序,即使是没有外部暴露的应用程序,都应该定期重新评估。不管在什么情况下,对 Python 2 用户来说,最好的长期策略都是迁移到 Python 3。Python 2 尽管非常棒,但它真的已经过时了。


原文链接:


https://www.infoworld.com/article/3365221/python-2-end-of-life-how-to-survive-the-end-of-python-2.html?upd=1553829360035


2019-04-03 08:045881
用户头像

发布了 536 篇内容, 共 274.5 次阅读, 收获喜欢 1561 次。

关注

评论

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

当你 git push 时,极狐GitLab上发生了什么?

极狐GitLab

DevOps gitlab SSH gitops 极狐GitLab

2022年震荡与加速中前行的新消费

易观分析

疫情 消费

2021年中国自然语言处理软件及服务市场规模超200亿,市场保持高速增长,竞争格局远未稳定

易观分析

自然语言处理 市场

WorkPlus移动办公系统:打造安全专属、统一业务与运营的企业门户

WorkPlus

怎样体面地讲道理?

图灵社区

写作 表达 逻辑

聚焦金融行业未来,博睿数据亮相第五届中国银行CIO峰会

博睿数据

AIOPS 金融 银行 博睿数据 ONE平台

Github最新Java面试1658核心讲,助力百人入大厂!

Java-fenn

Java 编程 程序员 java面试 Java面试题

Chrome操作指南——入门篇(十一)network

Augus

Chrome开发者工具 9月月更

企业选择局域网即时通讯软件的必要性是什么?

WorkPlus

疫情时代下,线上协同办公成时下热点

Baklib

远程办公 企业 协同办公 在线设计

MyBatis批量插入几千条数据慎用foreach

Java-fenn

Java

华为云GaussDB——打造金融行业坚实数据底座,共创数字金融新未来

Java-fenn

Java

《软件开发的201个原则》思考:6. 低可靠性比低效率更糟糕

非晓为骁

个人成长 软件工程能力 高质量

【9.16-9.23】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

牛客网趋势最热Java八股文,速度赶紧马上打包带走!

Java-fenn

Java 编程 程序员 java面试 Java面试题

前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件

葡萄城技术团队

金九银十必备!这份java面经让你轻松拿下45kOffer

Java-fenn

Java 程序员 面试 java面试 Java面试题

我所知道的webpack5那些不太一样的改变

Java-fenn

Java

SelectDB 创始人兼 CEO 连林江荣获 OSCAR 开源产业大会「尖峰开源人物 」奖项

SelectDB

数据库 大数据 数据仓库 企业号九月金秋榜 尖峰开源

优化帮助中心需要做到以下几点

Baklib

产品 帮助中心 在线设计

电商黄牛,你被小红书盯上了

小红书技术REDtech

算法 电商风控 黄牛治理

安利一个比Gitbook更好用的国内帮助文档制作平台

Baklib

J神出品!让 Compose 从此摆脱 ViewModel

Java-fenn

Java java;

TiDB Hackathon 2022丨总奖金池超 35 万!邀你唤醒代码世界的更多可能性!

PingCAP

#TiDB

数据湖系列之二 | 打造无限扩展的云存储系统,元数据存储底座的设计和实践

Baidu AICLOUD

数据湖 元数据

最全Java面试攻略,吃透25个技术栈Offer拿到手软

Java-fenn

Java 编程 程序员 java面试 Java面试题

日系“怎样”系列新版升级,一本书讲透程序运行的方方面面

图灵社区

Python 程序员 C语言 计算机

CAT 认证敏捷团队教练工作坊 (Coaching Agile Teams) | 2023年1月 7 日开课

ShineScrum

敏捷教练 专业教练

通过 Kasten K10 by Veeam 与 SUSE Rancher 实现云原生应用灾备迁移

Java-fenn

Java

Kong重构了其事件通知机制

八苦-瞿昙

Event Gateway API Gateway

测试驱动开发 (TDD) 在线练功房 | 12 月 17 日开课

ShineScrum

Python 2寿命即将终结,在此之前你需要做些什么?_编程语言_Senior Writer_InfoQ精选文章