我们在360如何使用Python – 引言

打算写这样一个系列,说说我们在360里面,如何使用Python。在360,除非是需要包含在360客户端软件当中的功能,技术人员使用什么语言进行开发,更多的是一种个人,最多是项目团队的决定。因此我们的同事会使用 php写页面,用python的工具,用c/c++写模块,甚至用易语言写界面。

也正是因为这个原因,虽然这个标题写得很大,但其实我也只能写一下我所在的团队如何使用Python。我们目前有Python代码约6万行,程序运行在Linux下,使用 Python2.5 和 Python 2.7 环境。

这6万行Python代码被被分成80余个项目进行组织。每个项目提供一个或一组完整的功能集合,每个项目都有自己的 setup.py 文件用来将项目代码打包成 Python 发布包(Distribution),部分项目还有自动文档生成,我们使用的是 SphinxreST格式的文本。打包好的Python包被发布到我们自己搭建的内网的与 pypi.python.org 兼容的私有 pypi 服务器上,而文档保存在内网的类似于 readthedocs 的服务器上。

后台团队的代码主要运行我们自己的Linux服务器集群上,开发和部署的成本比较低,因此我们使用比较敏捷的开发流程。流程大体上可以分为下面几个步骤:

  1. 开发:顾名思义,这个步骤当中,开发人员在开发机上面写代码实现功能,不同的开发人员的开发环境使用 扩展过的 virtualenv 脚本进行隔离;
  2. 单元测试:开发人员负责对代码当中的关键部分进行单元测试,通常使用 unittest,我们使用 nose 将测试用例聚合和进行回归测试,不定期使用 coverage 确定代码测试覆盖率(集成在nose当中)。这一步还会使用 PyLint 对代码进行扫描;
  3. 构建:使用 python distribute 将 Python代码构建成包,同时将这个包发布到测试版 pypi 服务器(pypi-testing),测试版pypi服务器是我们搭建的若干个私有pypi其中之一,发布工作使用的是我们扩展的 distribute 命令;
  4. 测试:在测试机器或测试流程当中,从测试版pypi当中获取最新的库并测试,这个部署过程我们使用 distribute 提供的 easy_install 工具进行;
  5. 发布:将经过测试的包从测试版pypi服务器移到发布版pypi服务器,这个同样通过扩展的 distribute 命令;
  6. 部署:运维人员从发布版pypi服务器上获取最新的库,并更新到真实的服务器上,并应用新的变更。这个过程当中任何一台单机部署使用的都是 easy_install,在分布式环境下,我们使用 Fabric 进行多机部署;
  7. 监控:新版本上线之后,会持续通过日志和报警系统进行系统监控。我们专门扩展了 logging 模块以便适应我们的监控需求。

熟悉Python的朋友们可能看到这些名词和包都很熟悉,因为我们所使用的都是业界广泛使用的开发、测试和运维的工具。但这些工具很多都适合于开源软件(Open Source Software)而非私有软件(Proprietary Software),例如 distribute 与 pypi.python.org 的结合是天衣无缝的,Sphinx 和 readthedocs 也是很容易结合,但是作为一个私有软件,我们无法将代码和文档放到 pypi 或 readthedocs 上面。为此我们几乎复制了整套的基础架构,包括 pypi 服务,readthedocs 服务等,后续我会介绍我们如何做到这点的。希望这个系列对于其他正在使用Python开发私有软件的同仁能有些帮助。

[to be continue]

37 thoughts on “我们在360如何使用Python – 引言”

  1. 我直接flake8+vim-syntastic来保证代码没有语法错误,日志部分现在小范围用着 sentry ,对你们 readthedocs 部分的权限控制实现挺感兴趣的。

  2. “技术人员使用什么语言进行开发,更多的是一种个人,最多是项目团队的决定”这句话中肯,360还有用易语言开发的项目呢。

    1. 前面还有一个限定语:“除非是需要包含在360客户端软件当中的功能”

      这里指的是后台运行的项目开发,在PC客户端上从性能、稳定性等各方面考虑,我们还是倾向于发布C/C++编写的原生程序

  3. 觉得国内企业对开源社区作出的贡献太少了,难道宁可“几乎复制了整套的基础架构”,也不愿意把一些有用的部分贡献出来吗?并不是商业公司,私有软件就不能对开源社区作贡献的。Github的一位员工写过一片文章讨论对于一个商业公司,什么是可以开源的,什么是不可以开源的,感觉说得很有道理。Open Source (Almost) Everything

  4. 建议你们用一下垃圾评论过滤器,不要博客内容和评论都是没营养的东西。文章啥都没写,评论还一大堆不错不错学习一下,学习你妹啊学习。。。由此真怀疑你们是有水军的!

    1. 垃圾评论过滤器是有的,而且每条评论都会通过人工审核。但准则是只要不是明显的广告或恶意灌水,就能发出来。如果用户就想说“不错”、“学习一下”之类的话,那我们是无权禁止的,就像我们也无权禁止您的批评一样。

评论关闭。