Upload
clayton-parker
View
4.939
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Buildout gives you a way to manage, build and deploy your Python project with ease. Large Python projects such as Plone use it to distribute repeatable development environments. Buildout allows you to easily get up and running with your project versus the traditional method of installing all the dependancies and manually configuring your applications instance for each environment. The buildout community is rapidly growing with a large repository of recipes that allow you to extend it's functionality. This talk will show you the basics of using buildout and how to make it a vital part of your project's life cycle.
Citation preview
open sourcenowhere to go but
sixfeetup.com/immerse
Using Buildout to Develop and Deploy
Python ProjectsClayton ParkerPyOhio 2009
sixfeetup.com/immerse
Who am I?
• Lead Developer at Six Feet Up, Inc.
• claytron on IRC
sixfeetup.com/immerse
What’s in store?• What is buildout?
• Who uses it?
• Syntax
• Pinning
• Recipes
• Command line usage
sixfeetup.com/immerse
Why buildout?
sixfeetup.com/immerse
Eliminate Confusion
sixfeetup.com/immerse
Who is using it?
• Plone
• Zope
• Grok
• Pinax
sixfeetup.com/immerse
sixfeetup.com/immerse
Lingo
sixfeetup.com/immerse
Syntax[buildout]parts = zope2 instance
# copied from dist.plone.org/releaseextends = plone-versions.cfgversions = versions
[zope2]recipe = plone.recipe.zope2installurl = ${versions:zope2-url}fake-zope-eggs = Trueadditional-fake-eggs = ZODB3 ZConfig
[instance]recipe = plone.recipe.zope2instancezope2-location = ${zope2:location}user = admin:admineggs = Plone
sixfeetup.com/immerse
Advanced Syntax
${part:option}
${zope2:location} ${buildout:directory}option = ${buildout:directory}/somefolder
Variable Substitution
options = foo bar
options += bazoptions -= foo
Option Addition and Removal
sixfeetup.com/immerse
Reserved Characters
: $ % { }
sixfeetup.com/immerse
Pinning
sixfeetup.com/immerse
[buildout]...extensions = buildout.dumppickedversionsdump-picked-versions-file = dumped-versions.cfgoverwrite-picked-versions-file = True
# tell buildout to use our versions partversions = versions
[versions]SQLAlchemy = 0.5.5
sixfeetup.com/immerse
Recipes
sixfeetup.com/immerse
[plonesite]recipe = collective.recipe.plonesiteinstance = instancezeoserver = zeoserversite-id = Ploneadmin-user = adminproducts = profiles-initial = my.package:initialprofiles = my.package:default
sixfeetup.com/immerse
[omelette]recipe = collective.recipe.omeletteeggs = ${instance:eggs}ignore-develop = Trueignores = setuptools# uncomment the line below to have the whole# zope stack available in the omelettepackages = ${zope2:location}/lib/python zope2
sixfeetup.com/immerse
# add the /opt path for local dev so that the egg# can find mysql_config[sql-env]PATH = %(PATH)s:/opt/local/lib/mysql5/bin/:/opt/local/lib/mysql/bin/
[MySQL-python]recipe = zc.recipe.egg:customegg = MySQL-pythonenvironment = sql-env
sixfeetup.com/immerse
Roll Your Own
$ easy_install ZopeSkel$ paster create --list-templatesAvailable templates: ... recipe: A recipe project for zc.buildout ...$ paster create -t recipe my.recipe.name
sixfeetup.com/immerse
Command Line
sixfeetup.com/immerse
Baby Steps
$ cd path/to/mybuildout
$ python2.4 bootstrap.pyCreating directory 'mybuildout/bin'.Creating directory 'mybuildout/parts'.Creating directory 'mybuildout/develop-eggs'.Generated script 'mybuildout/bin/buildout'.
$ bin/buildout
sixfeetup.com/immerse
Options• -v and -q
• increase and decrease verbosity
• -n and -N
• Newest and non-newest modes
• -O and -o
• online and offline mode
• -t
• socket timeout
sixfeetup.com/immerse
Update your buildout
$ bin/buildout -v
$ bin/buildout -Nvvv
$ bin/buildout -No
$ bin/buildout -t 10
sixfeetup.com/immerse
Assignments
$ bin/buildout instance:debug-mode=on
$ bin/buildout buildout:log-level=70
$ bin/buildout -N instance:debug-mode=on -v
$ bin/buildout -Nv plonesite:enabled=false
$ bin/buildout plonesite:site-replace=true
sixfeetup.com/immerse
Commands
$ bin/buildout install
$ bin/buildout -Nv install zope2 instance
$ bin/buildout -nv install instance
sixfeetup.com/immerse
Default Settings
[buildout]eggs-directory = /Users/clayton/.buildout/eggsdownload-cache = /Users/clayton/.buildout/downloads
zope-directory = /Users/clayton/.buildout/zope
~/.buildout/default.cfg
sixfeetup.com/immerse
Helpful Tools
• http://pypi.python.org/pypi/collective.eggproxy
• http://pypi.python.org/pypi/collective.dist
• Fabric or Paver
sixfeetup.com/immerse
What did we learn?• What is buildout?
• Who is using it?
• Syntax
• Pinning
• Recipes
• Command line usage
sixfeetup.com/immerse
Links• http://buildout.org
• http://pypi.python.org/pypi/zc.buildout
• http://www.sixfeetup.com/swag/buildout-quick-reference-card
• http://pypi.python.org
• Plone Specific:
• https://svn.sixfeetup.com/svn/public/examples/PyOhio09
• http://plone.org/documentation/tutorial/buildout
• https://svn.sixfeetup.com/svn/public/buildout/debug.cfg
sixfeetup.com/immerse
1 non-profit project • 10 workshops • 14 mentors • 3 days
Learn Plone by building a website from A to Z
sixfeetup.com/immerse
Photo Credits• http://flickr.com/photos/monsieurlam/2645956083/
• http://flickr.com/photos/_boris/2796908072/
• http://flickr.com/photos/b-tal/163450213/
• http://flickr.com/photos/bullish1974/2648544508/
• http://flickr.com/photos/haydnseek/87432002/
• http://flickr.com/photos/disowned/1158260369/
• http://flickr.com/photos/7603557@N08/2662531345/
• http://flickr.com/photos/julishannon/2151986631/
• http://flickr.com/photos/julishannon/2152778524/
• http://flickr.com/photos/lollyknit/1155225799/
• http://flickr.com/photos/binary_koala/86227485/
• http://flickr.com/photos/marcoveringa/2951042391