【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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

发布了 526 篇内容, 共 241.4 次阅读, 收获喜欢 1544 次。

关注

评论

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

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

葡萄城技术团队

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

Java-fenn

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

Chrome操作指南——入门篇(十二)color picker(颜色选择器)

Augus

Chrome开发者工具 9月月更

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

极狐GitLab

DevOps gitlab SSH gitops 极狐GitLab

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

Baklib

Chrome操作指南——入门篇(十三)element小技巧

Augus

Chrome开发者工具 9月月更

培养技能、增强信心、 获得亚马逊云科技认证

亚马逊云科技 (Amazon Web Services)

培训与认证

FAQ需要有哪些功能?哪些注意事项

Baklib

产品 产品经理 客户服务 FAQ

我也不想学之PHP系列(1)

吉师职业混子

9月月更

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

易观分析

疫情 消费

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

Java-fenn

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

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

WorkPlus

Baklib|怎样编写内嵌式的帮助文档?

Baklib

产品 产品经理 企业 帮助文档 在线设计

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

SelectDB

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

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

非晓为骁

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

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

Baklib

产品 帮助中心 在线设计

使用 NVIDIA CloudXR 从 Google Cloud 流式传输 VR 和 AR 内容

3DCAT实时渲染

峰会倒计时1天!九位行业大咖邀您共启极速统一的数据分析新范式

StarRocks

每日算法刷题Day16-和为S的两个数字、数字排列、二进制中1的个数

timerring

算法题 9月月更

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

易观分析

自然语言处理 市场

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

WorkPlus

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

Baklib

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

开发者有话说|在内卷中不断成长

timerring

9月月更 开发者有话说

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

Augus

Chrome开发者工具 9月月更

【Jvm】Jvm类加载机制

石臻臻的杂货铺

JVM 9月月更

[Javaweb]JSON

十八岁讨厌编程

json 后端开发 9月月更

AI走向何方?我们在GTC 2022看到了这些趋势

脑极体

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

Baidu AICLOUD

数据湖 元数据

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

Java-fenn

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

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

Java-fenn

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

关于 Angular 应用 tsconfig.json 中的 target 属性

Jerry Wang

typescript 前端开发 angular web开发 9月月更

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