写点什么

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:046029
用户头像

发布了 540 篇内容, 共 295.6 次阅读, 收获喜欢 1573 次。

关注

评论

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

2025年5月文章一览

codists

Python

超实用!Dify快速接入本地MCP服务

王磊

NITF 2025 聚焦核电数智化,时序数据库 TDengine 分享亿级数据处理方案

TDengine

tdengine 时序数据库 数据库·

鸿蒙仓颉语言开发实战教程:购物车页面

幽蓝计划

鸿蒙仓颉

Vinexpo Asia 2025于新加坡举行,在变局中为东盟酒饮贸易指明方向

极客天地

2025年测试人必看:AI+Playwright让自动化测试效率飙升200%?

测试人

人工智能 软件测试

恒普达:科技赋能公共安全,智领数字时代新未来

极客天地

存得快查得准,但就是算不动?试试时序数据库 TDengine × Spark 的组合拳

TDengine

数据库 tdengine 物联网 时序数据库

UCSXD-好的用户体验课程是怎样的?

科技热闻

更强劲,更高效:智源研究院开源轻量级超长视频理解模型Video-XL-2

智源研究院

AI 不再是 PPT:它在帮企业做发电预测、运维预警和用电规划

TDengine

数据库 tdengine 物联网 时序数据库

零基础也能转型!MES系统助力中小企业数字化转型

万界星空科技

数字化转型 数字化 制造业 mes 万界星空科技mes

VMmark 4.0.3 - 虚拟化平台基准测试

sysin

VMmark

《Nginx核心技术》第1章:安装Nginx

冰河

nginx 程序员 高可用 系统架构 架构师

故障定位系列:波动度故障

乘云数字DataBuff

智能运维 运维监控 故障复盘 故障排除

库存搞不好,利润掉一截!别让库存吃掉你的利润!

积木链小链

数字化转型 智能制造 库存管理

低代码时代,让“双手”再解放一点

秃头小帅oi

基于 Amazon Q Developer CLI 和 Amazon Bedrock Knowledge Bases 实现智能问答系统

亚马逊云科技 (Amazon Web Services)

烟草行业专卖人员画像与队伍考评系统(信创版)上线运行

中烟创新

七牛云存储基于时间戳防盗链的算法JAVA实现

Chris Zhang

Java 七牛云存储 安全 防盗链

艺术品NFT系统的开发流程

北京木奇移动技术有限公司

软件外包公司 区块链NFT 艺术品NFT

艺术品NFT的开发框架

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

Spring AI 结合DeepSeek使用教程

知识浅谈

LlamaFactory × 多模态RAG × Chat-BI,万字长文揭秘RAG进化迷踪,打造专业AI助手!

商汤万象开发者

AI 大模型 LLM

Studio 3T 2025.10 发布,社区版重磅回归

sysin

mongodb

Next的Seo实践

溪抱鱼

next

今年行情回暖了

王中阳Go

Go 就业

客户为纲,万目皆张——中烟创新致烟草客户的一封信

中烟创新

HarmonyOS Next 弹窗系列教程(1)

万少

鸿蒙 HarmonyOS

艺术品NFT系统的运营

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

通义灵码 AI IDE 正式上线,智能体自动写代码,首创自动记忆,工程感知全面升级

阿里巴巴云原生

AI 通义灵码

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