SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
Django & Buildout
                                           Horst Gutmann
                                        zerok@zerokspot.com




http://creativecommons.org/licenses/by-nc-sa/3.0/at/   Foto von http://flickr.com/photos/yakobusan/2363688612/
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 ...
 •   ... bei sich
 •   ... am Server
 •   ... auf jedem weiteren Rechner, der irgendwie
     irgendwas mit der Entwicklung zu tun haben
     soll




                        4
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               $ 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
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

Foto von http://flickr.com/photos/mdpettitt/2521514631/
                                            9
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
>>> 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
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 = 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
./bin/django
import sys
sys.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.manage
if __name__ == '__main__':
   djangorecipe.manage.main('mysite.settings')



                           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

Weitere ähnliche Inhalte

Ähnlich wie Django & Buildout

Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungTilo Baller
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeNETWAYS
 
Deployment mit Webistrano
Deployment mit WebistranoDeployment mit Webistrano
Deployment mit Webistranodaniel.mattes
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastrukturinovex GmbH
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als CodeJan Gehring
 
SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?René Winkelmeyer
 
Von Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenVon Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenQAware GmbH
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppetinovex GmbH
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHagilemethoden
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0Patrick Charrier
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...NETWAYS
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenOdilo Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenPatrick Baumgartner
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 

Ähnlich wie Django & Buildout (20)

Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & Verwendung
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
 
Deployment mit Webistrano
Deployment mit WebistranoDeployment mit Webistrano
Deployment mit Webistrano
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
 
Vagrant
VagrantVagrant
Vagrant
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?SNoUG 2015 - Vaadin - XPages 2.0?
SNoUG 2015 - Vaadin - XPages 2.0?
 
Von Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenVon Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 Minuten
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...
OSMC 2011 | Collectd in der großen weiten Welt - Anbindung des Datensammlers ...
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 

Django & Buildout

  • 1. Django & Buildout Horst Gutmann zerok@zerokspot.com http://creativecommons.org/licenses/by-nc-sa/3.0/at/ Foto von http://flickr.com/photos/yakobusan/2363688612/
  • 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
  • 15. ./bin/django import sys sys.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.manage if __name__ == '__main__': djangorecipe.manage.main('mysite.settings') 15
  • 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