360案例讲解:如何使用Python?
jopen
10年前
360一共80余个Python项目,6万行Python代码。每个项目提供一个或一组完整的功能集合,每个项目都有自己的 setup.py 文件用来将项目代码打包成 Python 发布包(Distribution),部分项目还使用是 Sphinx 和 reST格式的文本自动生成文档。打包好的Python包被发布到自己搭建的内网(与 pypi.python.org 兼容的私有 pypi 服务器),而文档保存在内网的类似于 readthedocs 的服务器上。
后台团队的代码主要运行我们自己的Linux服务器集群上,开发和部署的成本比较低,因此使用比较敏捷的开发流程。流程大体上可以分为下面几个步骤:
- 开发:这个步骤当中,开发人员在开发机上面写代码实现功能,不同的开发人员的开发环境使用扩展过的 virtualenv 脚本进行隔离;
- 单元测试:开发人员负责对代码当中的关键部分进行单元测试,通常使用 unittest,使用 nose 将测试用例聚合和进行回归测试,不定期使用 coverage 确定代码测试覆盖率(集成在nose当中)。这一步还会使用 PyLint 对代码进行扫描;
- 构建:使用 python distribute 将 Python代码构建成包,同时将这个包发布到测试版 pypi 服务器(pypi-testing),测试版pypi服务器是我们搭建的若干个私有pypi其中之一,发布工作使用的是我们扩展的 distribute 命令;
- 测试:在测试机器或测试流程当中,从测试版pypi当中获取最新的库并测试,这个部署过程我们使用 distribute 提供的 easy_install 工具进行;
- 发布:将经过测试的包从测试版pypi服务器移到发布版pypi服务器,这个同样通过扩展的 distribute 命令;
- 部署:运维人员从发布版pypi服务器上获取最新的库,并更新到真实的服务器上,并应用新的变更。这个过程当中任何一台单机部署使用的都是 easy_install,在分布式环境下,我们使用 Fabric 进行多机部署;
- 监控:新版本上线之后,会持续通过日志和报警系统进行系统监控。专门扩展了 logging 模块以便适应监控需求。