对于 python 社区来说,python 3 是最糟糕的的一个东西了。我依旧记得,当我第一次使用python的时候,我已经在c++的领域摸爬滚打了很长时间,python对我来说就像是一本圣经。我可以随便打开一个文本编辑器,几秒钟或几分钟之后,一个可以正常工作的程序就诞生了,而不用去花费几小时或几天的时间。我仍记得,python 2.5问世的时候添加了许多好用的新特性。我爱python,但同时我也承认她有缺点,但是还都说得过去,所有的语言都有缺点。她的优势在于她很有趣。尽管python 3相比python 2来说有了一些小的提升,但是她丢掉了很多python 2的优势。
python 2最重要的一个优势在于拥有众多的第三方库,可以用来做任何事情,但是python 3没有这个优势。诚然,有很多的库已经移植到python 3了,但是有更多的库没有移植,也不容易移植。例如,你需要解析 x,但是x不像yaml和json那样容易解析。很可能有一个第三方的解析器可供选择,但是只可以用python 2,而没有针对python 3的移植版本。此外,加之python 2中的字节字符串(str)和python 3 中的字节字符串(bytes)之间有着功能上的差异,使得这更难移植。而事实上,移植它非常困难,并且需要很多的小技巧(trick)来兼容python 2和python 3。所以,你有两种选择,要么使用python 2 (已经不建议使用的语言)快速的开发你的程序,但这会花费你十倍以上的时间去移植相关的库(以及所有的依赖)。要么,使用另一门同样拥有很多库的编程语言,但是不用再困扰于python 2 / 3之间的问题。第二种选择显然不受欢迎,因为如果我们这样做了,在我们的生产环境中已经有很多python 3的程序了并且大部分python 2的库需要被移植。不管这些情况是否存在,人们要么继续使用python 2开发程序,要么选择另一门不会打自己脸的语言。
python 2的另外一个优点是,用它写的程序几乎不用更改就可以运行在下一版本上。如果你的软件是基于python 2的,那么就可能花费一大笔钱才能将其迁移至python 3,因为你需要的工程可能相当地大,并且塞满了各种类库手册,而他们不能被迁移。这在商业策略上非常不明智,因为你不得不为此花费 大量的金钱和工程师的时间才能把工程迁移到python 3。你不妨问问其他人将整个代码迁移到ruby,或者,那还更划算。至此,要是你不得不重写你的软件,你还会选择python 3吗?不。
大多数比较受欢迎并且支持兼容python 2和python3的库是通过运行在各自平台上的语言子集(subset)来写的。我最喜欢的python库之一的sqlalchemy做得很好,django也是这样做的,但是稍有逊色。语言子集,我称之为python x,并不那么好用,需要很怪异的hack,并且通常性能不如python2 或 python 3。将现有的python 2的库移植到python x有趣吗?没有什么趣味可言,反而很悲哀,因为正是由于有趣才造就了今天的python。
不幸的是,python 2 已经不推荐使用了,python 3用的也不多。python 3 的改变比较小,没有得到多少,反倒失去了不少。在过去的几个月里,我使用python 3编写程序和服务。我个人感觉(没有吹嘘的意思),和用python 2 写程序没有太多差别,除了第三方的库少一些。真没有其他的令人眼前一亮的了。python的社区原本要在过去的几年中转移到python 3,但是,他们逐渐发现,人们正在转向新的语言(或重新改进过的旧语言)。这些语言大都拥有非常棒的功能,像强大的类型系统,模式匹配,更好的性能,更好的支持线程和高并发,更简单的ffi,更好的lambda表达式等等。
一种解决方案是fork python 2.7,并继续开发它,以向后兼容的方式添加新的功能,以便大多数不能移植的python 2的应用程序可以继续演化和改善,并给人们和花费了大量时间来开发它的公司带来价值。这是正确的事(实际上,如果guido和其他python社区中的领导者以官方的名义这样做而不是强制fork就更好了)。python 3中的功能需要向后移植到python 2,并且需要发布python 2.8。对于少数已经在使用纯python 3开发程序的人来说,可以使用像3to2这样的工具来兼容python 2.8。之后,python 3就可以逐渐的退居幕后,这样以来,那些python库的维护者就可以使用python 2而不用使用python x了。
虽然还有些别的方案,但复兴python 2明显是现在应该做的,其他的都不值一提。因为官方的负责人对python 2的使用者十分不屑,所以别指望他们会来复兴python 2。如果社区不重振旗鼓并复兴python 2,那python 3在几年后就会变成python的标准,同时很多相应的类库会被接入(尽管大多数肯定永远都不可能),很多的投资会失去。到那时,整个社区就会很明显地萎缩,失去她原有的光辉。看看perl的下场吧,人们会离开去别的地方。