当前位置: 首页 > 科技观察

为什么迁移到Python3需要这么长时间?

时间:2023-03-12 19:21:59 科技观察

在Pycon2014上,Python的发明者GuidovanRossum说:“现在是进入Python3的时候了!”--告诉现场观众应该开始在工作中采用Python3。经过核心代码贡献者和开源社区多年的努力,Python2终于走到了生命的尽头。根据pythonclock.org的说法,2020年1月1日是支持Python2的截止日期。对于一些几年前就已经进行了Python3迁移的公司来说,这将不是问题。但是,出于多种原因,许多公司不会很快迁移到Python2。对于大量使用Python的公司,尤其是那些可能还没有准备好很快迁移到Python2的公司,这种变化意味着什么?为了全面了解正在发生的事情,让我们来看看Python的历史。1.Python简史开发Python3的想法是实现一些重大变化,例如摆脱Python的遗留问题:将所有字符串呈现为Unicode。正如Python的核心开发人员之一BrettCannon所写:人们有时会忘记Python何时诞生。Guido于1989年12月开始编写Python,并于1991年2月首次作为开源发布。这意味着Python本身早于1991年10月发布的第一版Unicode标准。在随后的几年中,在Unicode之后创建的语言标准化选择使用基于Unicode编码字符串的实现。支持任何语言的Unicode和文本很重要。Python是一种世界语言,而不仅仅是支持ASCII涵盖的罗马字母的语言,这就是为什么Python3在处理文本时默认将其设为“Unicode”。它保证所有Python3代码都将支持世界上的每个人,无论编写该代码的开发人员是否明确为其分配了Unicode编码。不幸的是,该团队假设每个人都会立即做出重大转变,并使Python3向后不兼容,并将Python2设置为维护分支。然而,许多人不想转换,因为正如改进后的PEP所说,Python3是“对Python2的适度改进”。由于这些不便,许多人不会转换。当时,Python2和3最大的区别是将print语句更改为print()函数语法,这打破了很多Python2代码。因此,Python2在此后的许多年里一直处于积极的开发状态。然而,在2019年,Python3终于成为(大多数)新Python软件工程师开发语言的默认版本,许多公司和项目现在都在使用Python3的主要功能:f-strings、Path、类型提示、异步,当然还有Unicode编码。2.迭代过程缓慢自2008年发布新版本以来,Python3的市场份额增长缓慢:最初,不采用Python3的原因有很多:最重要的是,它不能向后兼容Python2。结果,一些主要的Python2库对迁移到Python3犹豫不决。2到3转换的转折点发生在2016年左右,随着Python3.5的发布,它的特点是矩阵乘法,asyncio的引入,OrderedDict的速度改进,以及类型提示的实现带来了类似于static语言的效用.Python3的更高版本包含更多功能,例如Pathlib库和f字符串操作。通过这些更改,向Python3的迁移开始使用许多库,例如用于机器学习的scikit-learn。随着越来越多的依赖开始升级,一些公司也开始迁移到Python3。从Internet的状态来看,您可能认为每个人都完成了Python3迁移。在制造IntelliJ和PyCharm等IDE的Jetbrains进行的一项调查中,75%的个人受访者表示他们已经迁移到Python3。一连串的博客文章都显示了相同的内容,例如,Dropbox在2018年秋季详细介绍了他们向Python3的迁移,Instagram在2017年迁移到Python3,而Facebook在2014年开始迁移到Python3。在客户的催促下,Splunk最近也做了同样的事情——迁移到Python3。但仅仅因为Python2即将到期并不意味着公司会在一夜之间停止使用它。我们如何知道Python2仍在大量使用?我们可以直接查看Python包仓库PyPI的运行情况。2016年,PyPI核心开发人员开始将日志发送到Google的BigQuery,以便能够针对它们运行SQL,从而更容易根据使用情况做出架构决策。例如,如果想查看过去30天内Python版本下载了哪些库,可以在BigQuery中新建一个项目(每月查询前1TB免费),运行:SELECTREGEXP_EXTRACT(details.python,r"^([^\.]+\.[^\.]+)")aspython_version,COUNT(*)作为download_count,FROMTABLE_DATE_RANGE([the-psf:pypi.dow??nloads],DATE_ADD(CURRENT_TIMESTAMP(),-31"day"),DATE_ADD(CURRENT_TIMESTAMP(),-1,"day"))GROUPBYpython_version,ORDERBYdownload_countDESCLIMIT100虽然Python3至少在一年内一直是社区中的主导版本,但PyPI的单个包下载的最新计数显示在2019年9月,所有至少40%的软件包下载都是2.7版本。诚然,这比年初的60%有所下降,但考虑到EOL仅剩几个月,该数据仍然很重要。在每个库的基础上,它变得有点棘手:大多数Flask下载是使用Python3版本完成的,但只有26%的botocore下载(适用于Python的AWSSDK)使用Python3。此外,还需要几个库已迁移:Twisted和PyPy(常用的JIT编译器)将无限期保留在版本2上。任何给定软件的生命周期结束通常并不意味着该软件不再可用。这确实意味着它不再针对任何安全漏洞进行更新或添加任何其他错误修复。但是,不更新到Python3会带来很多风险——最重要的是,可能会丢失安全更新,并且无法利用类型提示和速度改进等新功能。3、为什么Python3迁移这么慢?开个玩笑,在我写这篇文章时,我的IT系统仍在运行Java8(以今天的标准来看,这已经相当古老了。但根据2018年JVM生态系统报告,Java8仍然是一个主要的开发环境。)答案如下:大多数大型组织,在技术新闻发布的炒作周期之外,移动速度比新闻媒体或博主想象的要慢得多。例如,大多数主要银行仍在运行FORTRAN和COBOL编程语言系统。因此,虽然许多公司描述了他们的迁移策略,但更多的应用软件将长期保留在Python2上。为什么会这样?在所有决策中,政治与技术指导一样发挥着同样重要的作用。例如,为了在Facebook上使用Python3,JasonFried在2014年开始重写Python3服务。一路走来,他犯了很多错误,改了很多代码,做了很多修改,才让大家知道人们正在做Facebook的事情,比如接受新的开发人员培训以开始使用Python3。然后他与将Instagram转换为Python3的?ukaszLanga合作:2016年,他和Langa在Facebook组建了一个全新的团队来管理Python3公司。由于他们是“Python团队”,他之前提到的“公认的权威”开始发挥作用。人们认为他们可以在Facebook做出关于Python的决定。事实上,Instagram的迁移项目本身就耗时10个月。Guido和Langa现在工作的Dropbox花了三年时间,直到Guido几周前退休,这项工作仍在进行中。不可否认,以上案例都是巨大的Python代码库,但你不得不怀疑:如果Python顶尖的人花这么长时间来做,不是顶尖的公司可能需要更多的时间来制作决定。安全是一个重要的考虑因素。具有讽刺意味的是,您会认为不升级会带来更大的风险。但在较大的组织中,不允许升级Python3:管理员或安全团队向他们推送更新。在某些情况下,也不允许下载更新PIP。如果Python2是安全团队同意的默认协议,则可能需要付出巨大的努力才能说服人们切换到3,尤其是在受到严格监管(例如医疗保健或金融)和政府IT环境中。惯性虽然Linux很多版本(比如RHEL)在Python2和Python3之间包含了Python3,但这绝不是默认的,而且在2和3之间切换的时候,经常会发现一些问题,尤其是指向系统版本的时候链接默认使用Python2。Python从2到3已经走过了漫长的道路,被个人和具有前瞻性思维的初创公司采用。现在,第二大迁移将发生在大型企业从2迁移时。关于Python2,我们将在2020年看到40%使用率的数量进一步减少,但变化将是增量的。