django & buildout
DESCRIPTION
Short intro about how to use Buildout to speed up the development and deployment of Django projectsTRANSCRIPT
Django & BuildoutHorst Gutmann
Foto von http://flickr.com/photos/yakobusan/2363688612/http://creativecommons.org/licenses/by-nc-sa/3.0/at/
Django
• Web Framework in Python
• MVC
• ... jede Menge andere tolle Features, die hier nicht weiter relevant sind
• Zusammengefasst: <3
2
Django und seine libs
• Was brauchen wir so alles...
• Django
• django-tagging
• django-threadedcomments
• (sofern man schon die DB-libs usw. bereits installiert hat)
3
Das alles installiert man das alles ...
4
• ... bei sich
• ... am Server
• ... auf jedem weiteren Rechner, der irgendwie irgendwas mit der Entwicklung zu tun haben soll
Installiert aus & mit ...
• Direkt aus einem VCS heraus
• Derzeit leider noch sehr gängig, da Apps i.d.R. noch sehr frisch sind
• Mit einer setup.py
• Mit setuptools und easy_install (PyPI <3)
5
Alles root oder was?
• Man muss Libraries entweder als root installieren
• ... oder man ist gezwungen händisch den PYTHONPATH zu manipulieren
• ..., was die ganze Geschichte sehr umständlich macht
6
virtualenv
• virtualenv ermöglicht das einfache Installieren von Bibliotheken ohne root-Rechten
• Aufbau von eigenen Umgebungen, die beliebig geladen werden können.
7
$ virtualenv myenv
$ source myenv/bin/activate
$ cd /some/lib
$ python setup.py install
....
$ deactivate
Foto von http://flickr.com/photos/fensterbme/145621388/
virtualenv
• ... ist eine tolle Sache, wenn man Dinge ausprobieren möchte.
• Es löst aber nicht das Problem, dass man die Umgebungen immer händisch aufbauen muss.
• Sie sind nicht portierbar (C-Extensions?)
• ... und sie sind auch nur begrenzt verschiebbar.
8
zc.buildout
• Buildout ermöglicht es, mit einer einzigen config-Datei, eine Arbeitsumgebung (z.B. mit Abhängigkeiten) aufzubauen
• An sich die gleiche Idee wie bei Maven (Java), nur einfacher und ohne XML
• Ein Projekt besteht hier aus Teilen
• Woher kommen die Daten für den Teil und wo werden sie abgelegt
9Foto von http://flickr.com/photos/mdpettitt/2521514631/
Rezepte
• ... die eggs herunterladen und einem eigenen Interpreter zur Verfügung stellen
• ... die ein Distutils-Paket herunterladen und installieren
• ... die aus einem svn-Repository auschecken können
• usw.
10
Kleines Beispiel
>>> 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 für Django
• Das bringt mir als Django-Entwickler
• ... einen einfachen Weg, alle Abhängigkeiten zu installieren
• ... und sie zu fixieren, ohne Angst vor neuen Versionen haben zu müssen.
• ... sowie schnelleres Deployment mit diesen Abhängigkeiten
12
djangorecipe
• Rezept für Django-Projekte von Jeroen Vloothuis: http://pypi.python.org/pypi/djangorecipe/
• Legt ein Django-Projekt mit einer bestimmten Version an
• ... und erstellt einen manage.py-Wrapper
13
Noch ein Beispiel[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?
• Das djangorecipe kann auch einen WSGI-Wrapper erstellen
• Option: wsgi = true
• ./bin/django.wsgi
• Lädt auch alle Abhängigkeiten
16
Zusammenfassend• Buildout ermöglich Dependency-Management
von einer Vielzahl von Quellen (im Gegensatz zu setuptools alleine)
• Dependency + Version-Freeze
• Ein Django-Projekt damit entwickeln setzt nur noch eine buildout.cfg voraus
• djangorecipe bringt auch ein .wsgi-Script mit
• Und migrieren ist nicht mal aufwendig ;-)
17
Ein paar 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