使用zc.buildout構建python項目

來源:互聯網
上載者:User
文章目錄
  • 使用zc.buildout建立項目
  • buildout配置

如果你曾經是java開發人員並開始寫python,那麼你一定十分懷念maven的依賴管理和自動構建功能。你可能已經接觸過easy_install, pip, virtualenv等工具,但這些工具並不能完全解決問題。而zc.buildout恰好是你需要的答案。buildout不但能夠像setuptools一樣自動更新或下載安裝依賴包,而且還能夠像virtualenv一樣,構建一個封閉的開發環境。
zc.buildout是一個基於python的構建(build)系統,通過一個設定檔,可以從多個部分建立、組裝並部署你的應用,即使應用程式套件含了非python的組成部分,buildout也能夠勝任。

buildout最早由Zope團隊的Jim Fulton建立,後來被很多python項目和社區使用並獲得了極高的評價。比如Django的建立者Jacob Kaplan-Moss評價說,buildout是部署應用的一種非常文明的方式。另一個比較誇張的評價來自《Python For Unix and Linux》的合著者Noah Gift,由於xxx的原因(你懂的)就不翻譯了,原文如下:
"While not directly aiming to solve world peace, it perhaps will play a role in the future, as people will be less angry about application deployment and will have more time for making love and music."

使用zc.buildout建立項目

使用zc.buildout建立項目非常容易。首先安裝zc.buildout(可以使用easy_install或pip),
然後在專案檔夾中運行buildout init:

$ mkdir newproject
$ cd newproject/
$ buildout init
Creating '.../newproject/buildout.cfg'.
Creating directory '.../newproject/bin'.
Creating directory '.../newproject/parts'.
Creating directory '.../newproject/eggs'.
Creating directory '.../newproject/develop-eggs'.
Generated script '.../newproject/bin/buildout'.

其中,buildout.cfg是設定檔,類似於maven的pom檔案,而bin/buildout是build指令碼。
當共用代碼的時候,只有buildout.cfg需要加入版本控制。checkout之後,只需要運行buildout bootstrap,就可以再次產生這些檔案夾和檔案。

當然,作為一個文明人,你不必要求其他人也安裝zc.buildout,只需要下載bootstrap.py(也可以用buildout bootstrap產生)並將這個檔案也加入版本控制。這樣,其他人可以通過運行bootstrap.py產生需要的檔案。

整個過程如果出現DistributionNotFound之類的錯誤,一般是由於不乾淨的環境造成的,通過virtualenv建立全新的環境通常可以解決。

buildout配置

先看一下buildout.cfg的一個例子:

[buildout]
develop = .
parts =
  xprompt
  test

[xprompt]
recipe = zc.recipe.egg:scripts
eggs = xanalogica.tumbler
interpreter = xprompt

[test]
recipe = zc.recipe.testrunner
eggs = xanalogica.tumbler

buildout.cfg使用ini格式。其中[buildout]是必須的節。在本節中,可以定義:

develop = .
指定一個或多個要開發的模組,將會被build成develop-eggs下面的egg。每個develop目錄下都需要有一個setup.py檔案。
對於單個模組的應用,可以用“.”指定使用目前的目錄,對於多模組應用,可以分別指定各個模組的檔案夾。

parts =
    xprompt
    test
每個buildout可能需要很多個組件(part),parts指定了哪些組件需要build。如果一個組件依賴其他的組件,則被依賴的組件會被首先build。這裡面指定了兩個組件:xprompt和test。每個part中還可以用parts指定自己的子組件。

recipe = zc.recipe.egg:scripts
每個組件必須指定一個recipe,recipe定義了如何組裝該組件。zc.buildout提供了很多recipe,同時作為buildout的發源地,這裡也提供了很多recipe。你也可以開發自己的recipe。

每個recipe會定義一些參數,需要在part所在的節中指定這些參數的值。

eggs = xanalogica.tumbler
指定每個組件依賴的模組。

上面的例子中使用的zc.recipe.testrunner是一個常用的recipe,其功能是使用zope.testing.testrunner架構建立進行測試。將會對該節中指定的所有eggs進行測試。可以參考http://www.python.org/pypi/zc.recipe.testrunner 。

buildout.cfg中還可以指定很多其他的配置選項,比如通過interpreter指定python的版本,通過${section_name:param_name}引用已有的配置項等。詳細的配置說明可以看這裡。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.