python3打包工具之buildout初体验
背景
受到知乎使用buildout作为python项目的构建工具鼓舞,本文介绍和体验一下buildout打包工具。
初体验
准备工作
安装 buildout包
$ python3 -m pip install zc.buildout
cd newproject
buildout init
wget -O
快速入门
初体验中,我们在一个空的python项目中,打包上 zc.recipe.egg
和 bobo
这两个包。
编写配置文件
设置配置文件 buildout.cfg,内容如下:
[buildout]
parts = bobo
[bobo]
recipe = zc.recipe.egg
eggs = bobo
打包
运行 buildout
,结果目录信息如下:
$tree -L 3
.
├── bin
│ └── bobo
├── buildout.cfg
├── develop-eggs
├── eggs
│ ├── bobo-2.4.0-py3.6.egg
│ │ ├── bobo.py
│ │ ├── boboserver.py
│ │ ├── EGG-INFO
│ │ └── __pycache__
│ ├── WebOb-1.8.6-py3.6.egg
│ │ ├── EGG-INFO
│ │ └── webob
│ └── zc.recipe.egg-2.0.7-py3.6.egg
│ ├── EGG-INFO
│ └── zc
└── parts
运行
bobo已经在bin目录下了,可以直接运行
$bin/bobo -h
自定义服务
在这个例子中,我们可以自定义服务,包括服务的启动脚本。
编写配置文件
这里增加一个zc.zdaemonrecipe
服务,使用program来指定运行的脚本。
[buildout]
parts = bobo server
[bobo]
recipe = zc.recipe.egg
eggs = bobo
[server]
recipe = zc.zdaemonrecipe
program =
${buildout:bin-directory}/bobo
--static /=${buildout:directory}
--port 8200
打包
结果如下:
├── bin
│ ├── bobo
│ ├── server
│ └── zdaemon
├── buildout.cfg
├── develop-eggs
├── eggs
│ ├── WebOb-1.8.6-py3.7.egg
│ │ ├── EGG-INFO
│ │ └── webob
│ ├── ZConfig-3.5.0-py3.7.egg
│ │ ├── EGG-INFO
│ │ └── ZConfig
│ ├── bobo-2.4.0-py3.7.egg
│ │ ├── EGG-INFO
│ │ ├── __pycache__
│ │ ├── bobo.py
│ │ └── boboserver.py
│ ├── six-1.15.0-py3.7.egg
│ │ ├── EGG-INFO
│ │ └── six.py
│ ├── zc.recipe.egg-2.0.7-py3.7.egg
│ │ ├── EGG-INFO
│ │ └── zc
│ ├── zc.zdaemonrecipe-1.0.0-py3.7.egg
│ │ ├── EGG-INFO
│ │ └── zc
│ └── zdaemon-4.3-py3.7.egg
│ ├── EGG-INFO
│ └── zdaemon
└── parts
└── server
└── zdaemon.conf
其中多了
运行
启动服务
% bin/server start
.
daemon process started, pid=61952
结束服务
bin/server stop
.
daemon process stopped
其它
使用固定版本
[buildout]
parts = bobo server
[bobo]
recipe = zc.recipe.egg
eggs = bobo
[server]
recipe = zc.zdaemonrecipe
program =
${buildout:bin-directory}/bobo
--static /=${buildout:directory}
--port 8200
[versions]
bobo = 2.3.0
使用文件来指定版本
[buildout]
extends = versions.cfg
parts = bobo server
[bobo]
recipe = zc.recipe.egg
eggs = bobo
[server]
recipe = zc.zdaemonrecipe
program =
${buildout:bin-directory}/bobo
--static /=${buildout:directory}
--port 8200
version.cfg 文件如下:
[versions]
bobo = 2.3.0
让 buildout 来维护版本号
[buildout]
extends = versions.cfg
show-picked-versions = true
update-versions-file = versions.cfg
parts = bobo server
[bobo]
recipe = zc.recipe.egg
eggs = bobo
[server]
recipe = zc.zdaemonrecipe
program =
${buildout:bin-directory}/bobo
--static /=${buildout:directory}
--port 8200