用buildout來構建python項目

buildout是什麼

Buildout是一個基於Python的構建工具, 經過一個配置文件,能夠從多個部分建立、組裝並部署你的應用,即便應用包含了非Python的組件,Buildout也可以勝任. Buildout不但可以像setuptools同樣自動更新或下載安裝依賴包,並且還可以像virtualenv同樣,構建一個封閉隔離的開發環境.html

buildout 的中文文檔很是稀少,這裏有篇blog,抄一些東西過來python

demogit

步驟

假設你有一個項目newproject,歷來用過buildout,安裝什麼的就不說了github

cd newproject
buildout init
wget -O bootstrap.py https://bootstrap.pypa.io/bootstrap-buildout.py
python bootstrap.py

此時你能夠看到生成了一些目錄:eggs, develop-eggs,bin,parts等,先無論bootstrap

vim buildout.cfgvim

將下面的東西加到 [buildout] 段, 能夠新建一個versions.cfg來作之前pip時requirements.txt的做用工具

show-picked-versions=true
extends = versions.cfg
update-versions-file = versions.cfg
versions = versions

例如項目依賴爲ipython,vim versions.cfgpost

[versions]
ipython = 5.1.0

vim buildout.cfg,添加一個develop = 的玩意兒,假設開發的東西是個包,那麼目錄爲.,而且須要寫一個setup.py,不然執行bin/buildout會報錯ui

[buildout]
develop = .

隨便先寫一個簡單的setup.py, 其中package_dir={'': 'src'}必寫,src爲你項目的代碼根目錄,固然若是有依賴包的話須要些install_requiresurl

# -*- coding: utf-8 -*-
from setuptools import find_packages, setup

setup(
    name='buildout_demo',
    version='0.0.1',
    license='MIT',
    author='',
    author_email='',
    description='buildout demo',
    url='',
    packages=find_packages(exclude=['tests']),
    package_data={'buildout_demo': ['README.md']},
    package_dir={'': 'src'},
)

vim buildout.cfg, 注意這裏面必定要有一個part = 的東西

而後執行 bin/buildout, 你就會看到buildout會自動下載一些包(例如這裏的ipython)丟到eggs目錄下

添加part

[buildout]
parts = tools

[tools]
recipe = zc.recipe.egg
interpreter = ipython
eggs = ipython

[ls_root]
recipe = plone.recipe.command
command = ls -al /
update-command = ${:command}

其中,每一個part都必須有recipe這個玩意兒,而recipe則能夠認爲是buildout一些工做流的命令,例如 zc.recipe.egg是把包裝到egg目錄, plone.recipe.command 是在buildout時能夠執行的某些命令, 能夠在 pypi 搜索 buildout recipe列表

相關文章
相關標籤/搜索