用Buildout来构建Python项目
用Buildout来构建Python项目
什么是Buildout
(Remixed by Matt Hamilton, original from http://xkcd.com/303)
Buildout是一个基于Python的构建工具, 通过一个配置文件,可以从多个部分创建、组装并部署你的应用,即使应用包含了非Python的组件,Buildout也能够胜任. Buildout不但能够像setuptools一样自动更新或下载安装依赖包,而且还能够像virtualenv一样,构建一个封闭隔离的开发环境.
初始化Buildout
首先我们新建一个目录来共享Buildout配置和文件:
~/Projects$ mkdir buildout
~/Projects$ cd buildout
下载一个2.0的bootstrap.py脚本:
~/Projects/buildout$ wget http://downloads.buildout.org/2/bootstrap.py
然后创建一个Buildout的配置文件:
~/Projects/buildout$ touch buildout.cfg
运行bootstrap.py来生成Buildout相关的文件和目录:
~/Projects/buildout$ python bootstrap.py
Creating directory '/Users/Eric/Projects/buildout/bin'.
Creating directory '/Users/Eric/Projects/buildout/parts'.
Creating directory '/Users/Eric/Projects/buildout/eggs'.
Creating directory '/Users/Eric/Projects/buildout/develop-eggs'.
Generated script '/Users/Eric/Projects/buildout/bin/buildout'.
从上面可以看出,创建了目录bin,parts,eggs,develop-eggs,在bin目录下生成了buildout脚本:
- bin目录用来存放生成的脚本文件
- parts目录存放生成的数据,大多用不上
- develop-eggs 存放指向开发目录的链接文件。和buildout.cfg中develop选项相关
- eggs 是存放从网络上下载下来的egg包。这些包一般在buildout.cfg中的egg选项里定义
把Python和Pyramid集成进来
配置Buildout
~/Projects/buildout$ vim buildout.cfg
[buildout]
# 每个buildout都要有一个parts列表,也可以为空。
# parts用来指定构建什么。如果parts中指定的段中还有parts的话,会递归构建。
parts = tools
[tools]
# 每一段都要指定一个recipe, recipe包含python的代码,用来安装这一段,
# zc.recipe.egg就是把一些把下面的egg安装到eggs目录中
recipe = zc.recipe.egg
# 定义python解释器
interpreter = python
# 需要安装的egg
eggs =
pyramid
执行buildout命令来构建一下, 这将会把Pyramid集成进来:
~/Projects/buildout$ bin/buildout
用buildout来构建项目
现在可以创建Pyramid应用了:
~/Projects/buildout$ bin/pcreate -t starter myproject
配置一下Buildout:
~/Projects/buildout$ vim buildout.cfg
[buildout]
parts =
tools
apps
develop = myproject
[tools]
recipe = zc.recipe.egg
interpreter = python
eggs =
pyramid
[apps]
recipe = zc.recipe.egg
eggs = myproject
再次运行一下buildout:
~/Projects/buildout$ bin/buildout
现在可以再buildout的环境中启动myproject了:
~/Projects/buildout$ bin/pserve myproject/development.ini
Starting server in PID 40619.
serving on http://0.0.0.0:6543
最佳实践/Tips
1. 固化egg的版本
把所有的版本信息写到[versions]
里面:
extends = versions.cfg
versions = versions
show-picked-versions = true
配置中的“show-picked-versions = true
“会在运行buildout的时候把所有的版本打印出来, 把它写到"versions.cfg"中就可以固化了:
[versions]
Chameleon = 2.11
Mako = 0.7.3
MarkupSafe = 0.15
PasteDeploy = 1.5.0
WebOb = 1.2.3
distribute = 0.6.35
repoze.lru = 0.6
translationstring = 1.1
venusian = 1.0a7
zc.buildout = 2.0.1
zc.recipe.egg = 2.0.0a3
zope.deprecation = 4.0.2
zope.interface = 4.0.5
# Required by:
# pyramid-debugtoolbar==1.0.4
Pygments = 1.6
# Required by:
# myproject==0.0
pyramid = 1.4
# Required by:
# myproject==0.0
pyramid-debugtoolbar = 1.0.4
# Required by:
# myproject==0.0
waitress = 0.8.2
2. 使用mr.developer插件来组织大型的项目, 让开发更方便
[buildout]
...
extensions = mr.developer
…
3. 开发环境 VS 生产环境
我们可以创建多个配置文件, 比如把buildout.cfg作为生产环境的配置, 把develop的配置从buildout.cfg删除, 创建一个development.cfg作为开发环境的配置:
[buildout]
extends = buildout.cfg
develop = myproject
用Buildout来构建Python项目的更多相关文章
- 【Jenkins】jenkins构建python项目提示:'python' 不是内部或外部命令,也不是可运行的程序或批处理文件
一.问题:jenkins构建python项目提示:'python' 不是内部或外部命令,也不是可运行的程序或批处理文件 二.原因:要在jenkins配置本地环境变量 三.解决方案:添加python.e ...
- Jenkins构建Python项目提示:'python' 不是内部或外部命令,也不是可运行的程序
问题描述: jenkin集成python项目,立即构建后,发现未执行成功,查看Console Output 提示:'Python' 不是内部或外部命令,也不是可运行的程序,如下图: 1.在 Windo ...
- Jenkins构建Python项目失败
Console Output 提示:'Python' 不是内部或外部命令,也不是可运行的程序 定位原因:python.exe 不在jenkins执行用户的PATH里面 解决:构建的时候Python命 ...
- jenkins构建python项目时,提示python不是内部或外部命令的解决办法
1.回到 Jenkins 首页,点击 “构建执行状态”或“Build Executor Status” ,右则会列出本机信息. 完美解决!!!
- python项目构建工具zc.buildout
转载:http://blog.csdn.net/u011630575/article/details/52940099 buildout简介 Buildout 是一个基于Python的构建工具, Bu ...
- 2013流行Python项目汇总
2013流行Python项目汇总 转自:http://www.kankanews.com/ICkengine/archives/102963.shtml Python作为程序员的宠儿,越来越得到人们的 ...
- python项目
python实战项目: http://www.the5fire.com/category/python实战/ python基础教程中的十个项目: python项目练习一:即时标记 python项目练习 ...
- 以正确的方式开源 Python 项目
以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...
- 流行的Python项目汇总
年有哪些流行的Python项目呢?下面,我们一起来看下. 一.测试和调试 python_koans :Python Koans 算 “Ruby Koans” 的一部分,作为交互式教程,可以学习 TDD ...
随机推荐
- 用pyhton配置LVS_DR模式
import paramiko vip = '192.168.42.250' ds = '192.168.42.8' rs1 = '192.168.42.9' rs2 = '192.168.42.10 ...
- Linux - curl和Wget
curl - transfer a URL curl SYNOPSIS curl [options] [URL...] DESCRIPTION curl is a tool to transfer d ...
- 20190926 - macOS 下查看进程路径
首先,从 Activity Monitor 中查看进程 PID,然后使用以下命令查看. ps xuwww -p PID 另一个办法是,使用系统调用 proc_pidpath . #include &l ...
- js有序数组中插入一个元素,并有序的输出
题目:比较传入函数的参数,将参数组成数组,从小到大排序,返回新的数组. 如: insert();console.log(arr); //[] insert(-1,-2); console.log(ar ...
- 英特尔®oneAPI简介及动手实验研讨会召集令
Intel Developer Zone 2019年超级计算大会英特尔正式发布了oneAPI软件行业计划及其beta产品,在上篇文章中我们已为您介绍了oneAPI的基本含义,本文将继续为您介绍oneA ...
- 使用mysqldump对mysql进行备份与恢复
说明: 主参考:https://blog.csdn.net/fanren224/article/details/79693860 mysql数据全量备份 1.开启二进制日志,备份指定数据库 cat & ...
- bg_imgae
- 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题
ps:这是英伟达二面面的一道相关CUDA的题目.<NVIDIA CUDA编程指南>第57页开始 在合并访问这里,不要跟shared memory的bank conflic ...
- 手把手教你用原始方式上传项目至GitHub
小编GitHub:https://github.com/ds1889 首先你得注册一个自己的GitHub账号,注册网址:https://github.com/join 有了自己的账号以后,就可以进行登 ...
- Centos7 下安装docker
Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上. Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位.系统内核 ...