“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-04-03 08:045732
用户头像

发布了 520 篇内容, 共 236.4 次阅读, 收获喜欢 1543 次。

关注

评论

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

Flink 1.11 与 Hive 批流一体数仓实践

Apache Flink

flink 流计算 实时计算

直播预告 | 应用加固防破解,4.1折就够了

蚂蚁集团移动开发平台 mPaaS

安全攻防 App风险 mPaaS

【性能优化】纳尼?内存又溢出了?!是时候总结一波了!!

冰河

性能优化 内存泄露 高并发 高性能 内存溢出

手动造轮子——为Ocelot集成Nacos注册中心

yi念之间

nacos ASP.NET Core Ocelot

天源迪科受邀出席“第四届央企电商化采购发展高峰论坛"

DT极客

【Knative系列】一文读懂 Knative Serving扩缩容的原理

公众号:云原生Serverless

Serverless knative autoscaler kantive

手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc

yi念之间

RPC ASP.NET Core

甲方日常 45

句子

工作 随笔杂谈 日常

DDIA 读书笔记(5)数据分区方案

莫黎

读书笔记

英特尔首批独显笔记本亮相,非凡S3x纵享轻薄新体验

E科讯

Week 7 命题作业

阿泰

Android 一行代码接入 扫码 生成码

Java android kotlin zxing camera

区块链+能源 大放异彩

CECBC

区块链 能源

还在为算法烦恼?那你应该还没看过这份Git上70k标星的笔记

Java架构师迁哥

high-performance-tidb-challenge 记录

程序员老王

在深夜加油站遇见哈利波特

脑极体

性能测试,简单的压测工具

garlic

极客大学架构师训练营

Week 5学习总结

balsamspear

极客大学架构师训练营

全球首批搭载英特尔Xe MAX独显惊艳上市,非凡S3x尽显创作魅力

E科讯

训练营第三周作业

大脸猫

极客大学架构师训练营

银行数字化转型:需建立起以体验为核心、数据为基础、技术为驱动的架构体系

CECBC

银行 数字经济

Dubbo-go Server端开启服务过程

apache/dubbo-go

dubbo dubbo-go dubbogo

Week 5命题作业

balsamspear

极客大学架构师训练营

架构师第一期作业(第 7 周)

Cheer

课程作业

响应式编程简介之:Reactor

程序那些事

响应式编程 reactor Reactive 程序那些事 响应式系统

搭载设计师级独显英特尔Xe MAX,非凡S3x体验全能创作

E科讯

darknet A版安装

Dreamer

英特尔进军独显领域,第一批搭载锐炬®Xe MAX独显轻薄本已问世!

E科讯

央行数字货币为人民币国际化之路提供推动力

CECBC

数字货币

「混合云」会是云计算的下一个战场吗?

ToB行业头条

阿里云

书写高质量SQL的30条建议

诸葛小猿

MySQL SQL优化

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