python项目构建工具zc.buildout
轉(zhuǎn)載:http://blog.csdn.net/u011630575/article/details/52940099
buildout簡介
Buildout?是一個(gè)基于Python的構(gòu)建工具,?Buildout?主要是為了解決兩個(gè)問題:
- 中心化的應(yīng)用組裝和部署
- 重復(fù)的從Python軟件發(fā)布中組裝項(xiàng)目
通過一個(gè)配置文件?buildout.cfg?, 可以從多個(gè)部分創(chuàng)建、組裝并部署你的應(yīng)用, 能夠構(gòu)建一個(gè)封閉隔離的開發(fā)環(huán)境.
buildout安裝
pip install zc.buildoutbuildout使用
- 創(chuàng)建一個(gè)項(xiàng)目目錄:
- 初始化項(xiàng)目目錄
查看buildout后的目錄結(jié)構(gòu)
├── 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# 相當(dāng)于入口執(zhí)行的子函數(shù), 可以設(shè)置多個(gè)parts[app] # 編寫子函數(shù)app的邏輯 recipe =zc.recipe.egg# 除了recipe其他都是選項(xiàng)都被認(rèn)為是recipe的參數(shù) eggs =pymongo #需要安裝的依賴zone interpreter =python# 設(shè)置要安裝的解釋器保存后, 然后執(zhí)行
$ buildoutbuildout的流程, 先調(diào)用?[buildout]?, 然后發(fā)現(xiàn)parts中有app這個(gè)子函數(shù), 然后調(diào)用app這個(gè)子函數(shù)的邏輯,?app中除了recipe, 其他都被認(rèn)為是recipe的桉樹, 當(dāng)調(diào)用eggs時(shí), buildout發(fā)現(xiàn)這些包沒有被安裝, 于是自動(dòng)安裝包并存放在?eggs目錄下
- buildout會(huì)在eggs目錄下安裝zc.buildout, pymongo
- 在bin目錄下生 #!/usr/bin/env python
# -*- coding: utf-8 -*-fromsetuptoolsimportsetup, find_packagessetup(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再次執(zhí)行buildout, 會(huì)解析setup.py的數(shù)據(jù), 并安裝?install_requires?中填寫的所有包, 并且會(huì)通過?packages=find_packages?將當(dāng)前目錄加入到?sys.path
# 執(zhí)行buildout可得到下面輸出. 會(huì)安裝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中的需求包全被安裝了!!!
驗(yàn)證有效性
# 創(chuàng)建test文件, 添加代碼 $ vim test_path.py#!/usr/bin/env python # -*- coding: utf-8 -*-importsysif__name__ =='__main__': print(sys.path)現(xiàn)在我們需要使用當(dāng)前目錄bin下的可執(zhí)行文件python來運(yùn)行代碼
$ bin/pythontest_path.py運(yùn)行結(jié)果如下
['/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']- 首先會(huì)搜索當(dāng)前目錄下的包
- 然后會(huì)搜索eggs下由buildout安裝的包,?可以看出buildout的作用: 優(yōu)先加載當(dāng)前目錄eggs下的包
- 最后?才會(huì)搜索系統(tǒng)中的包?. 可以看到并沒有完全隔離系統(tǒng)中的包.
生成完全隔離的開發(fā)環(huán)境
使用工具:
- setuptools
- zc.buildout
- virtualenv
創(chuàng)建一個(gè)完全隔離的開發(fā)環(huán)境
- 創(chuàng)建一個(gè)空的項(xiàng)目文件
- 使用virtualenv創(chuàng)建一個(gè)虛擬環(huán)境
- 使用buildout來配置開發(fā)的需求.
- 結(jié)果setup.py集成測試, 開發(fā), 分布于一體. 成一系列可執(zhí)行文件, 此時(shí)我們?nèi)绻虢忉屓魏蝡ython腳本文件, 都必須執(zhí)行?bin/python xxx.py?(即當(dāng)前buildout的bin目錄中的python解釋器)
- 每個(gè)可執(zhí)行文件中的sys路徑都發(fā)生改變, 都會(huì)優(yōu)先讀取eggs下的三方包
buildout結(jié)合setup.py
將setup.py中填寫的name項(xiàng)對(duì)應(yīng)的值, 填寫到eggs中, 則在buildout會(huì)自動(dòng)加載setup.py中的配置
創(chuàng)建?setup.py?文件
?
轉(zhuǎn)載于:https://www.cnblogs.com/0xcafedaddy/p/8533781.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python项目构建工具zc.buildout的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP十六个魔术方法
- 下一篇: 【层次聚类】python scipy实现