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

Django & Buildout

Jul 02, 2015

Download

Technology

zerok

Short intro about how to use Buildout to speed up the development and deployment of Django projects
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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