django & buildout

18
Django & Buildout Horst Gutmann [email protected] Foto von http://flickr.com/photos/yakobusan/2363688612/ http://creativecommons.org/licenses/by-nc-sa/3.0/at/

Upload: zerok

Post on 02-Jul-2015

2.140 views

Category:

Technology


0 download

DESCRIPTION

Short intro about how to use Buildout to speed up the development and deployment of Django projects

TRANSCRIPT

Page 2: Django & Buildout

Django

• Web Framework in Python

• MVC

• ... jede Menge andere tolle Features, die hier nicht weiter relevant sind

• Zusammengefasst: <3

2

Page 3: Django & Buildout

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

Page 4: Django & Buildout

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

Page 5: Django & Buildout

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

Page 6: Django & Buildout

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

Page 7: Django & Buildout

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/

Page 8: Django & Buildout

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

Page 9: Django & Buildout

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/

Page 10: Django & Buildout

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

Page 11: Django & Buildout

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

Page 12: Django & Buildout

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

Page 13: Django & Buildout

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

Page 14: Django & Buildout

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

Page 15: Django & Buildout

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

Page 16: Django & Buildout

mod_wsgi?

• Das djangorecipe kann auch einen WSGI-Wrapper erstellen

• Option: wsgi = true

• ./bin/django.wsgi

• Lädt auch alle Abhängigkeiten

16

Page 17: Django & Buildout

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

Page 18: Django & Buildout

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