Python 构建工具 buildout 的介绍与使用
来到了新公司上班,首先就是得把自己的环境给搭起来。知乎使用了buildout作为python项目的构建工具。
那么什么是 buildout ?
buildout的是一款自动化构建工具。
由Zope团队开发维护。包名为zc.buildout。
buildout可以为应用构建独立的依赖环境。类似于virtualenv,但二者还有不同。
粗略地讲,buildout支持的功能更多更便于自动化而且具体定位有所不同。
首先我们建立一个 python 独立环境的沙盒,不管是 virtualenv 还是 miniconda 都行。配置好沙盒之后安装 buildout :
pip install zc.buildout
创建一个配置文件 buildout.cfg。配置文件是整个构建过程的核心,这里我直接上一个比较全的配置挨个说明字段含义 :
[buildout]
develop = .
index = mirror地址
newest = false
update-versions-file = versions.cfg
extends = versions.cfg
relative-paths = true
show-picked-versions = true
versions = versions
parts = app
test
gen-thrift [app]
recipe = zc.recipe.egg
interpreter = python
eggs = zticket
gunicorn
setuptools
tzone.cli
ipython
miller2
flake8
extra-paths = ${buildout:directory}/gen-py [gen-thrift]
recipe = plone.recipe.command
command = 我可以随便使用一个命令
update-command = ${:command} [test]
recipe = pbp.recipe.noserunner
eggs = ${app:eggs}
coverage
boring
mock
defaults = -vd --with-coverage --with-xunit --cover-xml --cover-package=zticket --boring
extra-paths = ${buildout:directory}/gen-py 这里注意一下变量替代
${} 这个语法
${:command} 这个代表的是当前应用下的command里面的值
${app:eggs} 这个代表的是app应用下eggs的值
可以看到,配置使用的是 INI FILE 语法,详情可以查看refer里面的描述和写法,这里只是提一下。
[buildout]: 这是一个必须的 session 块。
develop: 用来管理开发库的一个东西,一般不需要配置。这里配置`.` 符号,在执行 buildout 命令的时候生成的 develop-eggs 文件夹将会是一个空的。
newest: 这个参数默认是 true,如果是 true,那么会在 buildout 的时候总是检查最新版本,如果为 false 只有在包不满足需求的时候才会去更新版本。
update-versions-file: 指定一个包依赖的更新文件。一般使用 versions.cfg 来保存需要的依赖。
extended: 扩展配置的指定。
relative-path: 启用相对路径。
show-picked-versions: 这个字段默认是 false 的,如果是 true,当 buildout 在找到一个最新的发布版而且满足 requirement 申明的时候,将会重新写一条配置进versions.cfg文件里,也就是说 update-versions-file 配置的文件中。类似于这种格式:
# Required by:
# opentracing==1.0rc3
futures = 3.0.5
versions: 默认就是 versions 更详细可以参考这里。http://docs.buildout.org/en/latest/getting-started.html#pinned-versions。
到这里为止,buildout 的基础配置就结束了。下面的每个 section 可以理解为一个另外的app。由上面配置的 parts 申明的 app section 名字。
下面介绍各 parts 里面申明的块里面都做了什么。
app section 下面:
recipes: 首先每个块里面都必须包含一个 recipe 的项目,这个项目用来神明自己使用了什么工具。各种其他的包在 pypi 上都能下载到,各有不同的用处。也许这里可以将它理解成可以使用不同的插件。最常使用的是 zc.recipe.egg 这个 recipe 了,他可以被用来安装各种各样的包,并且打包成 egg 。
interpreter: 会创建一个包含eggs和依赖关系的环境在bin目录下面。
eggs: 是一个list被用来安装一个或者多个setuptools的依赖eggs。
extra-paths: 这个可以理解成,需要编译出应用之后应该被加入sys.path的路径。
gen-thrift section 下面:
使用了一个 plone.recipe.command 的 recipe,这个 recipe 的功能参见 https://pypi.python.org/pypi/plone.recipe.command?,简单来说就是一个可以提供在 build 的时候执行一个命令。
command: 在 build 的时候需要执行的命令。
update-command: 在 build 更新的时候需要执行的命令。
test section 下面:
使用的 recipe pbp.recipe.noserunner 查看 https://pypi.python.org/pypi/pbp.recipe.noserunner/0.2.6。
eggs: 和上面的建立依赖包相似,指定相关 eggs 。
default: 指定一个testrunner的默认选项。
extra-paths: 同样为应用中增加相关 sys.path。
在配置好相关设置之后,就可以开始愉快 build 了。build 之后可以发现,所有依赖包都被安装进了文件夹 eggs 中。just like this:

如果你足够仔细,可以发现这些都是文件夹。但是sys.path里面直接add他们的路径,就可以直接 import 他们。
sys.path like this:

可以看到 buildout 帮助我们完成了一个封闭环境并且自动实现包管理。有点 pip+virtualenv/conda 的感觉。而且这个环境可以在编译完成之后任意在同样 python 解释器环境下移动。
另外提一点,在下载环境的时候速度也比较重要,我们可以重新设置全局 pip 和 easy_install 源,来加速包安装。
通过环境变量修改:
export PIP_INDEX_URL=https://mirror.in.zhihu.com/simple
通过配置文件修改:
~/.pip/pip.conf
[global]
extra-index-url = mirror ~/.pydistutils.cfg
[easy_install]
index_url = mirror
另外,其他的想到之后再补充,以上。
Reference:
http://yabin.me/2017/07/25/buildout构建工具/ buildout构建工具
https://www-archive.mozilla.org/projects/cck/docs/WizardMachine/syntax.html INI file syntax
http://docs.buildout.org/en/latest/reference.html buildout官方文档
Python 构建工具 buildout 的介绍与使用的更多相关文章
- 自动化构建工具gulp简单介绍及使用
一.简介及安装: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快 ...
- python项目构建工具zc.buildout
转载:http://blog.csdn.net/u011630575/article/details/52940099 buildout简介 Buildout 是一个基于Python的构建工具, Bu ...
- python的构建工具setup.py
一.构建工具setup.py的应用场景 在安装python的相关模块和库时,我们一般使用“pip install 模块名”或者“python setup.py install”,前者是在线安装,会安 ...
- 前端构建工具gulpjs的使用介绍及技巧
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...
- 前端构建工具gulp介绍
2016年3月3日 10:46:08 晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- VS构建工具介绍
VS构建工具介绍 我们都知道C/C++源代码要生成可执行的.exe程序,需要经过编译.链接的过程.你在VS工具中只需要选择菜单Build或按一下F5可以编译.链接.运行了,其实IDE帮我隐藏了好多的具 ...
- [转载]前端构建工具gulpjs的使用介绍及技巧
转载地址:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非 ...
- 前端构建工具gulp之基本介绍
1.基本介绍 gulp.js是一个自动化构建工具,是自动化项目的构建利器.可以对网站的资源进行优化,将开发过程中一些重复的任务通过执行命令自动完成.这样能很大的提高我们的工作效率. gulp.js是基 ...
随机推荐
- centos7下安装docker(15.2跨主机网络-overlay)
为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络.VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网 ...
- [MySQL性能优化系列] 聚合索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- 使用dd备份和恢复ASM中的数据文件头
这里用大家随处可见的(除了extent分布的x$kffxp需要百度和google外),其余都是文档中有详细记载的常用ASM视图来实现同样功能: 下面的用于从ASM中备份数据文件头: SQL> s ...
- vue组件详解——使用slot分发内容
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 一.什么是slot 在使用组件时,我们常常要像这样组合它们: <app& ...
- bzoj-1787-洛谷-4281(LCA板子题)
传送门(bzoj) 传送门(洛谷) 可以说这道也是一个板子题 由于题中是三个人需经过的路径最短 就会有一点点不太一样 那么 就两两求LCA 这样之后就会出现两种状况 一.所得到的三个LCA是相等的 那 ...
- 蓝牙LMP概述
LMP 全称是Link Manager Protocol,我们还是要一张图,说明LMP 在哪里? 他是在HCI 以下,baseband 以上,实现在蓝牙控制器中. 按照协议规范,我们分几个部分来分别介 ...
- 高并发下的Java数据结构(List、Set、Map、Queue)
由于并行程序与串行程序的不同特点,适用于串行程序的一些数据结构可能无法直接在并发环境下正常工作,这是因为这些数据结构不是线程安全的.本节将着重介绍一些可以用于多线程环境的数据结构,如并发List.并发 ...
- iOS开发简记(9):APPStore审核
"觅知音"这个APP的第一个版本从提交审核到上架,历时三个星期,其中遇到一些审核上的问题,它的处理或许能帮助到遇到同样问题的小伙伴们,所以这里列举出来,这三个星期如何跟苹果的审核团 ...
- 八、xadmin自定义菜单栏顺序
xadmin默认是读取注册的app和所有注册到xadmin的mode来生成对应的菜单. nav_menu[app_key] = { 'title': app_title, 'menus': [mode ...
- 基于 Django的Ajax实现 文件上传
---------------------------------------------------------------遇到困难的时候,勇敢一点,找同学朋友帮忙,找导师求助. Ajax Ajax ...