日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python项目构建工具zc.buildout

發(fā)布時(shí)間:2023/11/29 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python项目构建工具zc.buildout 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(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.buildout

buildout使用

  • 創(chuàng)建一個(gè)項(xiàng)目目錄:
# 目錄名可以隨便起 $ mkdir decstree $ cd decstree
  • 初始化項(xiàng)目目錄
$ buildout init

查看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í)行

$ buildout

buildout的流程, 先調(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。