## zc.buildout for builds and profit Wes Mason [@1stvamp](http://twitter.com/1stvamp) [www.serverdensity.com](http://www.serverdensity.com/)
## What? - [www.buildout.org](http://www.buildout.org/) - Build tool (e.g. like make/cmake/rake) - Started out as Zope/Plone build tool (but don't let that put you off)
## Config files - INI / RFC 822 style - `buildout.cfg`
[buildout] develop = . parts = python test eggs = coverage Django [versions] Django = 1.2 coverage = 3.5.2 [python] ... [test] ...
## Dependencies - Install dependencies, version pinning etc. - Sandboxing (like virtualenvs, *but no longer in 2.x*) - `buildout` can be bootstrapped itself and sandboxed $ python boostrap.py $ bin/buildout
## Recipes - Many "recipes" available from PyPi for Python projects with config/setup - Build and install non-Python stuff along side your project - Various tasks for making your project
[buildout] parts = var-dir var-directory = ${buildout:directory}/var [var-dir] recipe = z3c.recipe.mkdir paths = ${buildout:var-directory}/celery
## bin scripts - Wrap console scripts in sandboxed `bin/` dir - `buildout` will do this automatically - You can also create special wrappers yourself: - `zc.recipe.egg` - `z3c.recipe.scripts` - Even interpreters
[python] recipe = z3c.recipe.scripts:interpreter eggs = ${buildout:eggs} extra-paths = ${buildout:directory}/src/myapp/somemodule script-initialization = os.environ['PROJ_ENV'] = "${config:environment}"
## Config files (again) - Extendable configs - Lets you create configs for specific setups - `production.cfg`
[buildout] find-links = http://my-private-pypi.somecompany.com/ extends = buildout.cfg [config] environment = production
$ bin/buildout -c production.cfg ... $ bin/python Python 2.7.1 >>> import os >>> os.environ['PROJ_ENV'] 'production'