python项目构建工具zc.buildout
轉載:http://blog.csdn.net/u011630575/article/details/52940099
buildout簡介
Buildout?是一個基于Python的構建工具,?Buildout?主要是為了解決兩個問題:
- 中心化的應用組裝和部署
- 重復的從Python軟件發布中組裝項目
通過一個配置文件?buildout.cfg?, 可以從多個部分創建、組裝并部署你的應用, 能夠構建一個封閉隔離的開發環境.
buildout安裝
pip install zc.buildoutbuildout使用
- 創建一個項目目錄:
- 初始化項目目錄
查看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# 設置要安裝的解釋器保存后, 然后執行
$ buildoutbuildout的流程, 先調用?[buildout]?, 然后發現parts中有app這個子函數, 然后調用app這個子函數的邏輯,?app中除了recipe, 其他都被認為是recipe的桉樹, 當調用eggs時, buildout發現這些包沒有被安裝, 于是自動安裝包并存放在?eggs目錄下
- buildout會在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再次執行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 -*-importsysif__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?文件
?
轉載于:https://www.cnblogs.com/0xcafedaddy/p/8533781.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python项目构建工具zc.buildout的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP十六个魔术方法
- 下一篇: 梦到很多老鼠预示着什么