《Django企业开发实战》试读:2.1 Python 2.7 与Python 3.x

上一章中,我们对需求进行了评审和分析,最终得到了具体要开发的功能点,并且对模块进行了划分。现在我们需要做的是,根据要开发的功能进行框架选择。 针对不同的场景选择不同的技术架构,所产生的开发成本和维护成本都不一样。特定场景下合适的技术架构能够让开发人员更快速地开发系统,并且后期的维护成本也大大降低。相反,一个不合适的技术架构,会导致开发和维护成本大大增加。 我尝试总结在做技术选型时应该考虑的因素。 □ 所选语言/框架/数据库是否应用广泛,是否有比较好的社区支持以及大量的用户反馈。 □ 语言/框架/数据库所提供的能力(功能)是否能够契合业务的需要,从而减少重复造轮子的工作量。 □ 自己团队的成员是否熟悉该框架和数据库,是否有人能够解决在框架使用中遇到的大部分问题。 这一章中,我们会讲Python 2 和Python 3 的选择,并对比Flask、Tornado 和Django 这三个Web 框架,了解它们的特点和应用场景。 2.1 Python 2.7 与Python 3.x 选择Python 2 还是Python 3 是近几年来比较流行的一个“话题”,当然这只是在网络某些论坛或者社区里。在真实的环境下,没有这么多纠结。选择目前应用最广泛的,周围人都在用,并且自己团队能够掌控住的,就是最合适的。对于Python 2 和Python 3 的差异,其实写起代码来,没那么大的差别,最关键的一点还是环境。一个熟悉而稳定的环境,能够支撑项目顺利上线,并且降低后期迭代的成本。 2.1.1 历史演进 随着Python 3.x 版本的成熟,越来越多新项目在开始时都会考量是否要选用Python 3 来做。相对几年前来说,现在这种倾向性更加明显。 其实早在前几年,我们就已经在考虑这样的事情了,甚至也做了些尝试。只是碍于相关周边的依赖,有些库还是没有Python 3 的支持,如果硬要上Python 3 的话,势必需要自己造很多轮子,时间成本非常高,所以还是在Python 2 上开发。无论是什么级别的技术选型,我们往往会选择团队擅长的技术栈来开发项目,这样能够在可控的时间内完成交付/上线。选择一个不熟悉的或者没有经受过大规模线上实践的技术栈是有风险的。 说明 哪些包已经支持Python 3,哪些还不支持,可以查看这里:https://python3wos.appspot.com/。 今天(2018 年5 月)看来,大部分的库已经对Python 3 做了支持。 在2017 年的PyCon 上,Instagram 宣布作为基于Django 的大规模(月活超过7 亿)应用,目前已经全面切换到Python 3.6 上,并且得到了不错的性能提升。这应该是当时公开的第一个把如此大规模的项目从Python 2 迁移到Python 3 上的案例。对于很多公司来说,这会是一个很好的榜样。但是需要注意的是,他们也付出了相应的时间成本以及试错成本。其实大部分的选型和决策都是在成本和收益之间进行考量。 关于Instagram的分享,建议你搜索Instagram PyCon 2017,查看当时的分享视频或者对应的关于视频内容解析的文章。这里分享InfoQ 的一篇文章《Python 向来以慢著称,为啥Instagram却唯独钟爱它》(详见http://www.infoq.com/cn/articles/instagram-pycon-2017)。 这是个不错的信号,有企业带了个好头,并且也有一些踩坑的分享。后面会有越来越多基于Python 3 的项目。对于重点项目,我们也会考虑迁移到Python 3 上。这其实也是一个环境问题。今年大家还在谈论Python 2 还是Python 3,Python 2 上踩过哪些坑,基于Python 2 的生产环境的经验分享。但是过几年,大家再讨论的可能就是基于Python 3 的经验分享了。如果你不跟上,也会脱离环境。这个问题就跟早些年有些人/团队孤独地使用Python 3 来做项目一样。 整体来说,Python 3 是趋势,并且从目前的周边环境和配套上来说,你可以开始尝试在Python 3上开发了。Python 3 会逐渐成为主流。 目前,我们团队开发的新项目基本上都会选择Python 3.6 来开发。 2.1.2 现实场景 回到现实,就像开头所说,从写代码上来说,Python 2 和Python 3 的差异没那么大。并不是说那些在企业中工作的人不思上进,懒得去把代码升级到Python 3,而是在企业中考虑更多的还是成本和回报。从开发项目的角度来说,没有哪些业务只能在Python 3 中实现,而在Python 2中无法实现。所以优先考虑的还是让项目如期上线,尽量避免线上的bug 给用户造成影响。 虽说对于语法、基础库上的变化,写起代码来不会有太大差别,但是对于运行中的问题,在没有大量经验的前提下,直接在生产环境下跑还是很有风险的。这个风险是我们要尽量避免的。就像我在知乎上的回答一样,产品经理和用户不会关心你用的是Python 2 还是Python 3,他们只关心你的程序会不会挂,数据会不会丢 。 因此,即便你现在(2018 年)直接学习Python 3,但等你到公司之后会发现,有些老项目依然跑在Python 2 上面,你可能需要接手这些项目。但是不用担心,还是上面那句话,语言和库上的差别不需要花太多时间就能熟悉,主要还是靠经验。你是否有Python 2 生产环境下开发和解决问题的经验,能够帮助企业快速解决老项目中的线上问题? 2.1.3 为未来做准备 上面虽然说到现实场景中我们应该拿擅长的工具来做项目,但是这样下去,会不可避免地进入一个死循环,导致工作中的技术环境跟不上社区主流环境的发展。对于技术人员来说,这是一个可怕的事情,就好像你并没有做错什么事情,却被企业淘汰了。 因此,我们需要在专注当下(无论是语言版本还是框架版本)的同时,研究新技术,无论是通过写一个Demo,还是像the5fire 这样写一个线上博客,把新技术用进去。等熟练掌握新技术之后,你就可以推动项目升级或者团队的技术栈升级了。 在这本书中,我们将直接使用Python 3.6 作为开发版本。我相信在接下来的时间里,会有越来越多的项目基于Python 3.x 来开发。但是,如果你遇到Python 2.7 的项目,也不必慌张,因为差别没那么大。 2.1.4 参考资料 □ Python 2 和Python 3 的差别:http://blog.jobbole.com/80006/。 □ Python 2和Python 3的主要差别:http://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html。 □ 如何看待Instagram 将所有Web 后端迁移到Python 3.6:https://www.zhihu.com/question/60333140/answer/175130694

>Django企业开发实战

Django企业开发实战
作者: 胡阳
副标题: 高效Python Web框架指南
isbn: 7115506892
书名: Django企业开发实战
页数: 392
定价: 99.00元
出版社: 人民邮电出版社
出版年: 2019-2
装帧: 平装