前言
python 打包和部署对于开源项目来说,pip/pypi 就足够了。但是对于公司线上的程序部署,有各种包依赖关系,需要做到依赖包隔离,程序版本管理,部署方式一致化。使用 docker 是很流行,并且通用的方式。还有没有更轻量的方式呢?这就是本文将介绍的内容。
一般来说,一个公司的线上系统版本是一致的,随系统发行版本带的 python 版本也是一致的。如果要跑不同的 python 版本,docker 是一个选择。这里讨论版本一致的情况。
介绍
用到了以下工具,
- virtualenv,包隔离
- fpm,打包工具,支持打包成 rpm/deb/osxpkg 等。
用 virtualenv 来做依赖包隔离,包含了自己的程序和依赖的包;系统自带的包管理工具(centos 是 rpm)来做版本管理,实现包的更新,回退。
操作步骤
fpm 安装(centos6 下为例)
- 安装 virtualenv-tools。
pip install virtualenv-tools
- 安装 ruby(>=1.9.3),用到了 scl。
yum install rh-ruby23-ruby rh-ruby23-ruby-devel
scl enable rh-ruby23 bash
- 安装 fpm。
gem install fpm
python项目
可以参考 pychinadns,需要写 setup.py。
打包
fpm --verbose -f -v 0.1.0 -n flowcleaner -s virtualenv -t rpm --virtualenv-pypi http://mirrors.aliyun.com/pypi/simple flowcleaner/
-s 指定源类型,-t 指定目标类型,-n 指定包名,flowcleaner/ 是项目目录。
会把整个 virtualenv 的目录打包到rpm里,virtualenv 里包含了依赖的包。
部署和运行
部署就是一个rpm包!跟标准的rpm包操作一样。
rpm 安装时,virtualenv 默认安装在 /usr/share/python 目录下。
执行/usr/share/python/flowcleaner/bin/python xxx.py
来从 virtualenv 里运行。