知行编程网知行编程网  2023-01-01 00:30 知行编程网 隐藏边栏  6 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python 2即将退出舞台,是否应该迁移到Python 3的相关知识,希望可以帮到处于编程学习途中的小伙伴

Python 2 即将退休,我们是否应该迁移到 Python 3

我可以负责任地告诉你,你可以放弃 Python 2.0 版本,因为 Python 3 简直太棒了。当然,如果能把项目从Python 2移植到Python 3就更好了。虽然Python 3备受推崇,但是如何“将大量应用程序从Python 2迁移到Python 3”的问题一直困扰着技术人员。本文将回答你的问题。


Python 2 即将退出历史舞台

Python 3 发布已经十年了。 Python 2 的产品生命周期结束原定于 2015 年,但它被延长到 2020 年 1 月 1 日——原因是在 2013 年和 2014 年,人们还没有准备好将项目“迁移”到 Python 3 上。 Python 3.0 几乎无法使用,Python 3.1 和 3.2 运行速度比 Python 2 慢。这个问题的根源在于许多第三方库仍然使用 Python 2。直到 2012 年,200 个最常用的 Python 包中只有一半迁移到Python 3,而在 2018 年,只有大约 95% 的 Python 包被迁移,这些是最常用的 Python 包。至于那些不太常用或不太流行的,没人关心,所以最后的报废期又延长了5年。在过去的 5 年里,Python 3 的变化不尽相同。最新版本的 Python 3(3.6 及更高版本)运行速度快且功能丰富。


为什么仍然有一些 Python 2 项目?

从商业角度来看,迁移成本太高。作为开发人员,我们在过去几年中编写的每一行 Python 2 代码都是一种技术债务。但大多数公司并不是由开发人员经营的。所有的商业决策都是由管理者做出的,他们的重点是为公司带来商业价值的项目。事实上,一种在几个月内就过时的编程语言是没有足够的时间为它重写所有项目的。将项目从 python2 迁移到 python3 非常昂贵,并且不会为公司增加更多价值。虽然它会改进项目,但不会向产品添加任何新功能。

就像女人的衣橱里总少了一件晚礼服,总有一些新的功能等待技术人员去开发,总有一个紧急的bug需要修复。如果你是“敏捷的”(因为现在每个人都很敏捷)并且你有一个待办事项列表,如果迁移到 Python 3 在你的待办事项列表上,它只是最后一项。如果你是一家小型初创公司,你需要的不是完美的、最新的代码,而是添加新功能和改善用户体验。

如果你是一家大公司,那就是另一回事了。迁移大量遗留 Python 代码(甚至 3500 万行 Python 2 代码)绝对令人沮丧。更糟糕的是,如果这些代码中的一些是由离职的前雇员编写的,几乎没有经过测试,文档很少,而且陈旧过时。但是代码仍然有效,只是没有人知道它是如何工作的,而且多年来也没有人使用过它们。在某些时候,你将不得不重写它,所以这段代码在 Python2 中已经“半死不活”了。


继续使用 Python 2 的风险

让我们做一个假设——快进两个月,Python 2 彻底“退休”,所有人都在为 Python 3 做准备,你只能面对仍在 Python 2 上运行的生产代码。并开始思考:“最坏的结果是什么? “

结果是——你可能被黑了。当然,在 Python 3 或任何其他编程语言上也有可能被 hack,但在 Python 2 上被 hack 的风险更大。没有人会更新 Python 2,更不用说修复其中的错误了。这还不是最糟糕的,更糟糕​​的是用户不得不考虑他们正在使用的 Package,因为大多数 Packages 已经放弃了他们的 Python 2 版本,并且更多的 Packages 将在明年 1 月放弃 Python 2。嗯,对 Python 2 的依赖性越大,出现安全问题的可能性就越大。

即使该软件没有任何安全问题,它也会随着时间的推移慢慢开始崩溃。如果每次都更新部分系统(更新系统以保证安全),就会出现系统与新软件不兼容的问题。也许一些开发人员会从 PyPI 中删除他们的 Packages,最终的结果是花费越来越多的时间来填补漏洞以保持项目的运行。


Python 2 还有救吗?

你能眼睁睁地看着 Python 2“生命终结”什么都不做吗?我只能说,如果可以将项目迁移到 Python 3,那就去做吧。因为迁移后获得的长期收益将远远超过迁移成本。但是如果能迁移,相信很多人都已经迁移了,就不会看这篇文章了。所以我假设你不想迁移项目但正在寻找其他解决方案,这里是我的 Python 2 项目的其他解决方案列表,从我的主观角度来看,按解决方案的难度排序:


· 什么都不做

你可以对自己撒谎并假装 Python 3 不存在,而忽略 Python 2 已“生命终结”的事实。正如我之前提到的,不要更新软件,“执着地”冒着数据泄露的风险继续使用 Python 2,即使某些依赖项可能在某个时候停止工作。但是,如果你只是在计算机上运行的某种内部脚本上使用 Python 2,并且它没有依赖项,那么什么都不做是最好的解决方案。如果你的软件明年可能会过时,那么在仔细决定是否迁移之前,是时候权衡利弊了。


· 冻结应用状态

对于不用担心安全问题的内部工具,冻结应用状态是一个很好的解决方案(这里的“内部”是指离线状态)。但是,如果某些依赖项有问题,那么它就有麻烦了。依赖 Python 2 的项目明年将开始出现问题,正如我上面提到的,人们会从 GitHub 甚至 PyPI 中删除旧项目,你记得删除一个填充文本的库,所有构建的代码开始崩溃。龙事件?那时每个人都在嘲笑 JavaScript,所以准备好迎接同样的事情吧,除非可能没有人会再嘲笑你,因为你使用的是已弃用的 Python 版本。

幸运的是,我们还有 docker 和其他工具可以让你创建不可变的容器。编写一个使用 Python 2 作为基础镜像的 Dockerfile。添加依赖项并将应用程序设置为 docker 映像。将安装映像推送到公共或私有存储库。所以,你有一个不可变的容器,里面有一个办公应用程序,你可以共享它并将它用于你自己的目的,而不用担心某些依赖项不可用。它使用内部工具解决了大多数问题。在它可用时立即使用它,以免在 2020 年应用程序开始崩溃时为时已晚。


· 改变 Python 翻译器

当我说“不再使用 Python 2”时,我的意思是“不再使用 CPython 2”。 CPython 是最流行的 Python 解释器,所以对于很多人来说,Python == CPython。但它不是唯一的翻译器。例如,还有 PyPy,它是 CPython 的替代品。

那么为什么不是每个人都使用 PyPy?因为 PyPy 有一些限制。如果你的项目严重依赖 C 扩展,那么 PyPy 可能不适合你。但是如果你切换到 PyPy,你需要使用测试来验证一切是否正常工作,如果是这样,你的应用程序甚至可能运行得比以前更快。不得不说,这是一个不错的“副作用”。

PyPy 不是唯一的选择。英特尔维护着自己的 Python 发行版,称为“英特尔® Python 发行版”。这是一个支持 Python 2.7 和 3.6 的免费发行版。当我与该项目的一位参与者交谈时,他们表示他们不打算很快弃用 2.7 版。


· 商业 Python 发行版

除了上述场景,还有商业化的解决方案。其中之一是红帽企业 Linux (RHEL)。如果你购买了版本 8,Red Hat 将在 2024 年 6 月之前为你提供对 Python 2 的支持。这相当于为你额外购买 4 年的 Python 2 错误修复和更新,代价是从免费和开源编程切换向付费使用他们发布的 Python 的人提供语言。你还可以在线找到 Python 2 付费版本的其他提供商。


· 构建自己的 CPython 2


项目迁移至 Python 3

如果以上选项都不适合你,那么你可能最终还是将项目迁移到 Python3。有两种常见的方法可以做到这一点:交叉代码或将 Python 2 代码重写为 Python 3。


· 跨代码

跨越代码意味着同时使用 Python 2 和 Python 3 代码。这听起来像是更多的工作,因为你需要同时支持两个主要的 Python 版本,但它会使转换更容易——从 Python2 到 Python3 的转换不会太突然。先在 Python 3 下跑测试(当然,大部分都会失败),然后不断重写部分应用,直到在 Python 2 和 Python 3 上都能正常运行。接下来就是更改生产环境中的 Python 版本,最后删除 Python 2 代码。这种方法的好处是你可以在迭代中执行此操作。客户喜欢这样一个事实,即你可以在迁移部分系统的同时不断向代码添加新功能。


· 将 Python 2 重写为 Python 3

另一种选择是在 Python3 中重写部分 Python2 代码。这种方式更容易,因为你不必再​​考虑 Python 2。典型的做法是在生产中保留应用程序的 Python2 版本,并在单独的 git 中使用 Python3 版本。然后你不断地测试新版本,当它准备就绪时,你放弃 Python 2 并使用 Python 3 版本。如果一些程序在没有测试的情况下“回滚”到 Python 2,那将是令人沮丧的。请务必注意,这种方法意味着你需要暂停向你的应用程序添加新功能。


· 重新编写应用

最后也是最困难的解决方案是使用 Python 3 或你认为最高效的任何其他编程语言从头开始重写应用程序。这个解决方案是浪费时间和金钱,并且只有在 Python 2 版本只是一个原型时才有效。但它允许你完全重新设计你的项目,也许它真的适合你。


到底要不要迁移到 Python 3?

一开始就说了,如果你的项目能迁移到python3,那就迁移吧。 Python 3 不仅比 Python 2 快得多,而且还具有更多出色的新功能,例如 asyncio、类型提示、有序字典、f 字符串和更好的 Unicode 支持。形势已起,开发商应及早谋划。

众多
,尽在python学习网,欢迎在线学习!

本文转自:https://www.jianshu.com/p/07c80fea50d3

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享