python3打包工具之buildout初体验

  |   0 评论   |   0 浏览

背景

受到知乎使用buildout作为python项目的构建工具鼓舞,本文介绍和体验一下buildout打包工具。

初体验

准备工作

安装 buildout包

$ python3 -m pip install zc.buildout
cd newproject
buildout init
wget -O

快速入门

初体验中,我们在一个空的python项目中,打包上 zc.recipe.eggbobo 这两个包。

编写配置文件

设置配置文件 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

参考