2. Django
• Web Framework in Python
• MVC
• ... jede Menge andere tolle Features, die
hier nicht weiter relevant sind
• Zusammengefasst: <3
2
3. 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
4. Das alles installiert man
das alles ...
• ... bei sich
• ... am Server
• ... auf jedem weiteren Rechner, der irgendwie
irgendwas mit der Entwicklung zu tun haben
soll
4
5. 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
6. 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
7. virtualenv
• virtualenv ermöglicht
das einfache Installieren $ virtualenv myenv
von Bibliotheken ohne $ source myenv/bin/activate
root-Rechten $ cd /some/lib
• Aufbau von eigenen $ python setup.py install
Umgebungen, die ....
beliebig geladen $ deactivate
werden können.
Foto von http://flickr.com/photos/fensterbme/145621388/
7
8. 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
9. 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
Foto von http://flickr.com/photos/mdpettitt/2521514631/
9
10. 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
11. Kleines Beispiel
$ buildout
>>> buildout.cfg PyPI Canonical
[buildout]
parts = sample
[sample]
recipe = zc.recipe.eggs
interpreter = myinterpreter
eggs =
storm==0.12
$./bin/myinterpreter
> from storm.locals import *
11
12. 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
13. 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
14. Noch ein Beispiel
[buildout]
parts = django svnapps
[django]
recipe = djangorecipe
version = 1.0
project = mysite
settings = settings
extra-paths =
${svnapps:location}/tagging
[svnapps]
recipe = iw.recipe.subversion
urls =
http://django-tagging.googlecode.com/svn/trunk/ tagging
14
16. mod_wsgi?
• Das djangorecipe kann auch einen WSGI-
Wrapper erstellen
• Option: wsgi = true
• ./bin/django.wsgi
• Lädt auch alle Abhängigkeiten
16
17. 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
18. 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