python项目构建工具zc.buildout
转载:http://blog.csdn.net/u011630575/article/details/52940099
buildout简介
Buildout 是一个基于Python的构建工具, Buildout 主要是为了解决两个问题:
- 中心化的应用组装和部署
- 重复的从Python软件发布中组装项目
通过一个配置文件 buildout.cfg , 可以从多个部分创建、组装并部署你的应用, 能够构建一个封闭隔离的开发环境.
buildout安装
pip install zc.buildout
buildout使用
- 创建一个项目目录:
# 目录名可以随便起
$ mkdir decstree
$ cd decstree
- 初始化项目目录
$ buildout init
查看buildout后的目录结构
├── bin
│ └── buildout
├── buildout.cfg
├── develop-eggs
├── eggs
│ ├── setuptools-18.4-py2.7.egg
│ └── zc.buildout-2.4.6-py2.7.egg
└── parts
配置buildout.cfg文件
[buildout] # 脚本入口
show-picked-versions =true# 显示所安装的版本
parts =app# 相当于入口执行的子函数, 可以设置多个parts [app] # 编写子函数app的逻辑
recipe =zc.recipe.egg# 除了recipe其他都是选项都被认为是recipe的参数
eggs =
pymongo #需要安装的依赖
zone
interpreter =python# 设置要安装的解释器
保存后, 然后执行
$ buildout
buildout的流程, 先调用 [buildout] , 然后发现parts中有app这个子函数, 然后调用app这个子函数的逻辑, app中除了recipe, 其他都被认为是recipe的桉树, 当调用eggs时, buildout发现这些包没有被安装, 于是自动安装包并存放在 eggs目录下
- buildout会在eggs目录下安装zc.buildout, pymongo
- 在bin目录下生
#!/usr/bin/env python
# -*- coding: utf- -*- fromsetuptoolsimportsetup, find_packages setup(
name='test',# 此处填写包名
version='0.0.1',
author='andrewliu',
author_email='liu.bin.coder@gmail.com',
description='This is just a test',
license='PRIVATE',
keyword='test',
packages=find_packages('apps'),
install_requires=[
'nose',# 此处填写需要的包
'pymongo',
'mysql-python',
'redis',
],
)并修改buildout.cfg文件
[buildout]
develop =.
show-picked-versions =true
parts =app [app]
recipe =zc.recipe.egg
eggs =
test
interpreter =python再次执行buildout, 会解析setup.py的数据, 并安装
install_requires中填写的所有包, 并且会通过packages=find_packages将当前目录加入到sys.path# 执行buildout可得到下面输出. 会安装buildout和setup.py中的所有包
[versions]
MySQL-python =1.2.5
setuptools =18.5
zc.buildout =2.4.7
zc.recipe.egg =2.0.3 # Required by:
# test==0.0.1
nose =1.3.7 # Required by:
# test==0.0.1
pymongo =3.1 # Required by:
# test==0.0.1
redis =2.10.5可以看到setup.py中的需求包全被安装了!!!
验证有效性
# 创建test文件, 添加代码
$ vim test_path.py #!/usr/bin/env python
# -*- coding: utf-8 -*- importsys if__name__ =='__main__':
print(sys.path)现在我们需要使用当前目录bin下的可执行文件python来运行代码
$ bin/pythontest_path.py
运行结果如下
['/Users/andrew_liu/Zhihu/buildout/buildout', '/Users/andrew_liu/Zhihu/buildout/buildout/eggs/redis-2.10.5-py2.7.egg', '/Users/andrew_liu/Zhihu/buildout/buildout/eggs/MySQL_python-1.2.5-py2.7-macosx-10.10-intel.egg', '/Users/andrew_liu/Zhihu/buildout/buildout/eggs/pymongo-3.1-py2.7-macosx-10.9-intel.egg', '/Users/andrew_liu/Zhihu/buildout/buildout/eggs/nose-1.3.7-py2.7.egg', '/Users/andrew_liu/Zhihu/buildout/buildout/bin', '/Library/Python/2.7/site-packages/distribute-0.6.49-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages']
- 首先会搜索当前目录下的包
- 然后会搜索eggs下由buildout安装的包,
可以看出buildout的作用: 优先加载当前目录eggs下的包 - 最后
才会搜索系统中的包. 可以看到并没有完全隔离系统中的包.
生成完全隔离的开发环境
使用工具:
- setuptools
- zc.buildout
- virtualenv
创建一个完全隔离的开发环境
- 创建一个空的项目文件
- 使用virtualenv创建一个虚拟环境
- 使用buildout来配置开发的需求.
- 结果setup.py集成测试, 开发, 分布于一体.
成一系列可执行文件, 此时我们如果想解释任何python脚本文件, 都必须执行
bin/python xxx.py(即当前buildout的bin目录中的python解释器) - 每个可执行文件中的sys路径都发生改变, 都会优先读取eggs下的三方包
buildout结合setup.py
将setup.py中填写的name项对应的值, 填写到eggs中, 则在buildout会自动加载setup.py中的配置
创建 setup.py 文件
python项目构建工具zc.buildout的更多相关文章
- python的构建工具setup.py
一.构建工具setup.py的应用场景 在安装python的相关模块和库时,我们一般使用“pip install 模块名”或者“python setup.py install”,前者是在线安装,会安 ...
- 前端项目构建工具---Grunt
什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...
- Gulp.js - 简单、直观的自动化项目构建工具
Gulp.js 是一个简单.直观的构建系统.崇尚代码优于配置,使复杂的任务更好管理.通过结合 NodeJS 的数据流的能力,你能够快速构建.通过简单的 API 接口,只需几步就能搭建起自己的自动化项目 ...
- grunt项目构建工具
JS项目构建工具Grunt实践 一:下面来介绍下如何用grunt合并,压缩js文件. 大概步骤有如下: 1. 新建文件夹相对应的项目 比如文件名叫:gruntJs 2. 新建文 ...
- Java项目工程化之项目构建工具Maven
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
- 项目构建工具maven的使用方法
最近在开发javaweb项目中有用到maven,以前并不是很了解,于是学习了一些相关内容,记之共享. 本篇内容在Windows环境下实施,JDK版本使用的1.7.0_79. 一.maven是什么? 简 ...
- 项目构建工具ant的使用
ant是项目构建工具,以xml文件作为构建文件,在这个xml文件(默认是build.xml,当然也可以取其它名字)里我们可以定义多个目标,用我们期待的方式去构建项目,比如说编译,测试,发邮件等等. a ...
- 【项目构建工具】 Gradle笔记1
一.Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XM ...
- 取代 Maven?这款项目构建工具性能提升 300%
在 GitHub 上闲逛的时候,发现了一个新的项目:maven-mvnd,持续霸占 GitHub trending 榜单好几天了. maven-mvnd,可以读作 Maven Daemon,译作 Ma ...
随机推荐
- HDU 5790 Prefix(字典树+主席树)
Prefix Time Limit: 2000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- [经验分享]Windows系统下生成IOS证书
我使用ApiCloud开发APP,开发后需要生成IOS的证书才能在项目开发控制台中进行编译,于是我在网上大海捞针似的寻找办法. 官方文档提供了使用苹果系统下生成IOS证书的步骤,对于我这个没有imac ...
- python注解(装饰器)的用法
带参数的要用三层def,第一层写注解里的参数,第二层写函数,第三层写具体逻辑. 如果是不带参数的注解,直接使用后两层即可 def needPermission(permissionstr): def ...
- Activator.CreateInstance;Delegate.CreateDelegate
原文发布时间为:2011-10-11 -- 来源于本人的百度文章 [由搬家工具导入] Activator.CreateInstance:http://msdn.microsoft.com/en-us/ ...
- glance总结
Openstack将glance独立出来的一个原因是尽可能将镜像存储至多种存储上,由glance提供一个完整的适配框架.现在支持亚马逊对象存储S3.openstack自有的swift对象存储,以及常用 ...
- NEMA协议详解
NEMA协议的由来 NMEA协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marin ...
- CentOS下SVN使用
1. 介绍 这里想在CentOS上搭建的是基于http访问的SVN Server 2. 软件 安装相关软件 yum install httpd httpd-devel mod_dav_svn subv ...
- Video for Linux Two API Specification Revision 2.6.32【转】
转自:https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.html Video for ...
- 6.DataFrame(列运算)
from odps import ODPS from odps.df import DataFrame o = ODPS(access_id="LTAIBb3aOF3ghjek", ...
- ()C# DataRow
判断某列是否存在,返回bool dr.Table.Columns.Contains("水分含量")