Python高级编程(第2版)
上QQ阅读APP看书,第一时间看更新

1.4 当前Python 3的普及程度

Python 3有许多强大的新功能,那么它在社区中广泛普及了吗?遗憾的是,并没有。有一个著名的网站叫“Python 3荣耀之墙(Python 3 Wall of Superpowers)”,里面记录了大多数常用软件包与Python 3的兼容性,不久前这个网站刚刚改名为“Python 3耻辱之墙(Python 3 Wall of Shame)”。目前这种状况正在逐步改善,上述网站的软件包列表中绿色的比例也在每月缓慢增加在这个网站上,如果某个软件包被标为绿色,则表示它支持Python 3,红色则表示不支持。——译者注。尽管如此,但这并不代表很快所有应用开发团队都只使用Python 3。当所有常用软件包都支持Python 3时,“我们所用的软件包还没有迁移到Python 3”这一常用借口将不再适用。

造成目前这种状况的主要原因是,将现有应用从Python 2迁移到Python 3上总是一项不小的挑战。像2to3之类的工具可以进行代码自动转换,但无法保证转换后的代码100%正确。而且,如果不做人工修改的话,转换后的代码性能可能不如转换前。将现有的复杂代码库迁移到Python 3上可能需要付出巨大的精力和成本,某些公司可能无法负担这些成本。但这些成本可以分割成小份来逐步完成。一些优秀的软件架构设计方法可以帮助其逐步实现这一目标,如面向服务的架构或者微服务。新的项目组件(服务或微服务)可以用新方法编写,现有的项目组件可以逐步迁移。

长远来看,将项目迁移到Python 3只有好处。根据PEP-404这份文档,Python 2.x分支将不会发布2.8版本。而且未来所有重要的项目(如Django、Flask和NumPy)可能都将放弃2.x的兼容性,仅支持Python 3。

我个人对这个问题的观点可能会引发争议。我认为在创建新的软件包时,最好鼓励社区完全放弃支持Python 2。当然,这一做法极大地限制了这些软件的适用范围,但对于那些坚持使用Python 2.x的人来说,这可能是改变他们想法的唯一方法。