django & buildout (en)
TRANSCRIPT
Django & BuildoutHorst Gutmann
Photo: http://flickr.com/photos/yakobusan/2363688612/http://creativecommons.org/licenses/by-nc-sa/3.0/at/
Django
• Web Framework in Python
• MVC
• ... has tons of great features that are actually not really relevant for the topic at hand
• Summary: <3
2
Django and its libs
• What do we usually need ...
• Django
• django-tagging
• django-threadedcomments
• (if things like DB-bindings are already installed)
3
All of that you have to install on ...
4
• ... your own machine
• ... your server
• ... and basically every other machine that has anything to do with the development
Installing from & with ...
• Straight from an SCM-checkout
• Sadly that’s still very common since the apps are still quite young
• Using a setup.py
• Using setuptools and easy_install (PyPI <3)
5
Being root helps
• You have to either install these libraries as root user
• ... or you have to start messing around with the PYTHONPATH
• ... which normally results in just a big mess
6
virtualenv
• virtualenv lets you install Python packages without being root
• It lets you build environments for those packages that you load at will
7
$ virtualenv myenv
$ source myenv/bin/activate
$ cd /some/lib
$ python setup.py install
....
$ deactivate
Photo: http://flickr.com/photos/fensterbme/145621388/
virtualenv
• ... is a great tool if you want to try a new library
• But it doesn’t solve the problem that you have to manually reconstruct the environment every time.
• The environments are not portable (C-extensions?)
• ... and not moveable (experimental right now)
8
zc.buildout
• Buildout now lets you build a whole environment with just one config-file
• Basically, it’s similar to Maven in the Java-world, just without XML ;-)
• A project consists of multiple parts
• Each part defines, where its data is coming from and where to store it
9Photo: http://flickr.com/photos/mdpettitt/2521514631/
Recipes exist ...
• ... that download eggs and build a wrapped interpreter to test them
• ... that download a source-distribution and install it
• ... that checkout code from Subversion
• ... and much much more
10
A small example
>>> buildout.cfg
[buildout]parts = sample
[sample]recipe = zc.recipe.eggsinterpreter = myinterpretereggs =
storm==0.12
11
$ buildout
$./bin/myinterpreter> from storm.locals import *
PyPI Canonical
Buildout for Django
• What is in for Django developers?
• A simple way to install dependencies
• ... and to freeze them at a version
• ... and naturally really fast deployment (even with a WSGI-script)
12
djangorecipe
• Recipe for Django projects by Jeroen Vloothuis: http://pypi.python.org/pypi/djangorecipe/
• Creates a Django project with a given version
• ... and creates a wrapper for manage.py with all eggs and other dependencies loaded
13
Another example[buildout]parts = django svnapps
[django]recipe = djangorecipeversion = 1.0project = mysitesettings = settingsextra-paths = ${svnapps:location}/tagging
[svnapps]recipe = iw.recipe.subversionurls = http://django-tagging.googlecode.com/svn/trunk/ tagging
14
import syssys.path[0:0] = [ '$HOME/.buildout/eggs/djangorecipe-0.12.1-py2.6.egg', '$HOME/.buildout/eggs/zc.recipe.egg-1.1.0-py2.6.egg', '$HOME/.buildout/eggs/zc.buildout-1.1.1-py2.6.egg', '$HOME/.buildout/eggs/setuptools-0.6c9-py2.6.egg', '$HOME/tmp/buildout2/parts/django', '$HOME/tmp/buildout2', '$HOME/tmp/buildout2/parts/svnapps/tagging', ]
import djangorecipe.manageif __name__ == '__main__': djangorecipe.manage.main('mysite.settings')
./bin/django
15
mod_wsgi?
• djangorecipe can also be used to create a WSGI-script
• Option: wsgi = true
• ./bin/django.wsgi
• Naturally also includes all the dependencies
16
Summary
• Buildout provides easy dependency management from a multitude of sources (public or not and not only with setuptools)
• Dependencies AND freezing of them
• For developing on a Django project all you need is one buildout.cfg
• djangorecipe also provides you with a WSGI-script
• Migrating to it is very easy :-)
17
Some links
• http://www.djangoproject.com
• http://pypi.python.org/pypi/zc.buildout/
• http://pypi.python.org/pypi/djangorecipe/
• Icons: http://graffletopia.com/stencils/144
• Pony: http://djangopony.com
18