选择2和选择3是近几年来比较流行的一个“话题”,当然这个只是在网络某些论坛或者社区里。在真实的环境下没有这么多的纠结。选择目前应用最广泛的,周围人都在用,并且自己团队能够hold住的,就是最合适的选择。对于2和3的差异,其实写起代码来,没那么大的差别,最关键的一点还是环境。
随着3.x版本的成熟,越来越的新项目在开始时都会考量是否要选用3来做,相对于几年前来说,这种倾向性更加明显。
我们在新开发项目时也会做这样的考虑。早在前几年我们就已经在考虑这样的事情了。只是碍于相关周边的依赖,有些库还是没有Python3的支持,所以还是在Python2上开发。当然,另外一个因素也不得不说,那就是成本,时间成本。我们往往会选择团队擅长的技术栈来开发项目,这样能够在可控的时间内,完成交付/上线。选择一个不熟悉的或者没有经受过大规模线上实践的技术栈是有风险的。
哪些包已经支持Python3,哪些还不支持可以通过这里查看:https://python3wos.appspot.com/ (需翻墙)
今天看来,大部分的包已经对Python3做了支持。
在刚结束的PyCon 2017上,Instagram宣布作为基于Django的大规模的应用,目前已经全量切到Python3.6上,并且得到了不错的性能提升。有兴趣的可以到youtube上观看、学习: Lisa Guo, Hui Ding Keynote PyCon 2017。
这是个不错的信号,有企业带了个好头,并且也有一些踩坑的分享。后面会有越来越多的基于Python3的项目,以及对于重点项目,也会考虑迁移到Python3上。这其实也是一个环境问题。今年大家还在谈论2还是3,2上踩过哪些坑,基于2的生产环境的经验分享。但是过几年大家都在讨论的可能就是基于3的经验分享了,如果你不跟上,你也会脱离环境。这个问题就跟早些年有人孤独的使用Python3来做项目一样。
整体来说,3是趋势,并且从目前的周边环境和配套上来说,可以开始尝试Python3上的开发了。Python3成为主流已经很快了。
回到现实,就像开头所说,从写代码上来说,Python2和Python3的差异没那么大。并不是说那些在企业中工作的人,为了偷懒,而不去把代码改为Python3。而是工作或者说企业中,考虑更多的还是成本和回报。从开发项目的角度来说,没有哪些业务是只有在Python3中能实现,而在2中无法实现的。所以第一优先考虑的还是让项目如期上线,尽量避免线上的bug给用户造成影响。
虽说对于语法、基础库上的变化,写起代码来,不会有太大差别,但是对于运行中的问题,在没有大量经验的前提下,直接在生产环境下跑还是很有风险的。这个风险是我们要尽量避免的。就像我在知乎上的回答一样,产品和用户不会关心你用的是2还是3,他们只关心你的程序会不会挂,数据会不会丢。如何看待 Instagram 将所有 Web 后端迁移到 Python 3.6 ?
因此即便你现在(2017.06)直接学习的Python3,等你到公司之后会发现,有些老的项目依然是跑在Python2的上面。你可能需要接手这些项目。但是不用担心,还是上面那句话,语言和库上的差别不需要花太多时间就能熟悉。主要还是经验,你是是否有Python2生产环境下的开发和解决问题的经验,能够帮助企业快速的解决老项目中的线上问题。
上面虽然说到现实场景中我们应该拿我们擅长的工具来做项目。但是这样下去会不可避免的进入一个死循环,导致工作中的技术环境跟不上社区主流环境的发展。对技术人员来说,这是一个可怕的事情。好像是你并没有做错什么事情,却被企业淘汰了。
因此我们需要专注当下的同时,研究下新的技术,无论是通过写一个Demo还是像the5fire这样,写一个线上的blog,把新的技术用进去。等你熟练掌握了新技术之后,你可以推动项目升级或者团队的技术栈升级。
在这个教程中,虽然我们是基于Python2.7来开发项目,但是我们会做一些兼容的处理,以便于我们在最终可以轻松的把项目跑在Python3.6上。基于Python2.7的原因依然是现在大部分的项目依然是跑在它上面,最终要迁移到Python3.6,也是因为我们要迎合社区的发展。避免我们成为孤独的开发者。