pycon-2012-lightning-talk



pycon-2012-lightning-talk

0 0


pycon-2012-lightning-talk

Lightning talk for PyCon UK ???? on zc.buildout

On Github 1stvamp / pycon-2012-lightning-talk

zc.buildout for builds and profit

Wes Mason

@1stvamp

www.serverdensity.com

What?

  • 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'