用Buildout來構建Python項目


用Buildout來構建Python項目

 

什么是Buildout

alt 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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM