SlideShare a Scribd company logo
1 of 30
Download to read offline
Zastosowanie buildout przy
wdrażaniu projektów opartych o
      framework Django
          Dominik Szopa
        http://dominno.pl




           PyCon PL 2009
       16-18 październik 2009
Agenda

    • Django - wdrażanie projektów,
    • Virtualenv i Buildout,
    • Buildout i Django,
    • Podsumowanie,
    • Przydatne linki.
 
 
 
Django - wdrażanie projektów


 Każdy projekt składa się z wielu zależności:
  
   • Django,
   • Aplikacje zewnętrzne(np. django-tagging),
   • Biblioteki(np. docutils, beautyfullsoap).
  
  
Django - wdrażanie projektów


Zależności mogą być instalowane z wielu źródeł:

• Systemu kontroli wersji,
• Używając setup.py,
• Używając setuptools i easy_install.
Django - wdrażanie projektów


 Wielokrotna instalacja i konfiguracja na:
   • Komputerach developerów,
   • Serwerze,
   • Wszystkich innych maszynach które mają coś
     wspólnego z developmentem.
  
Django - wdrażanie projektów


 Złe praktyki:
  
   • Instalacja zależności w systemowym site-packages,
   • Umieszczanie projektu wraz z pakietami zależnymi w
     katalogach, które nie są zdefiniowane w PYTHONPATH.
  
 Mogą prowadzić w rezultacie do:
Rozwiązanie ? Virtualenv i Buildout
Co to jest virtualenv ?

• Tworzy odseparowane,    $ virtualenv moj_env
  niezależne środowisko   $ source bin/activate 
  Pythona,                (moj_env) $ cd jakas_biblioteka
• Odizolowuje pakiety     (moj_env) $ setup.py install
  od systemowego site-    (moj_env) $ deactivate
  packages.                
Wady virtualenv



• Nie rozwiązuje problemu ręcznej instalacji pakietów,
• Środowiska nie są przenośne,
• Środowiska nie są portowalne.
Co to jest buildout ?


• Automatyzuje instalacje zależności projektu,
• Projekt składa się z poszczególnych składników,
  definiowanych w pliku konfiguracyjnym,
• Do konfiguracji oraz instalacji określonego składnika,
  używane są rozszerzenia zwane "recipes" (przepisy),
• Każdy składnik zawiera informacje skąd pobrać dane oraz
  gdzie je zapisać.
Istnieją przepisy które:



    •   Pobierają pakiety i instalują je w formie eggów,
    •   Pobierają źródła z systemu kontroli wersji,
    •   Tworzą symlinki,
    •   Wykonują polecenia systemowe,
    •   Pobierają i kompilują pakiety binarne,
    •   Więcej na http://pypi.python.org, 160+ dostępnych.
 
Buildout - przykład
                           $ buildout
[buildout]                  
parts = part1 part2                 PyPi               moje repo
    
[part1]
    recipe = moj_przepis
    
[part2]
       recipe =
   moj_inny_przepis
                                            mój desktop

                           $ python
                           >>> import part1
                           >>> import part2
Buildout i Django


Istnieje przepis "djangorecipe" dla Django który:

• pobiera i instaluje Django w wskazanej wersji,
• tworzy skrypt-nakładkę na manage.py w którym są wpisane
  ścieżki do wszystkich zainstalowanych zależności przez
  Buildout.
Buildout i Django - w szczegółach
Co będzie potrzebne



• Python,
• virtualenv,
• bootstrap.py  z
  http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/b
  ootstrap.py,
• terminal.
Tworzenie środowiska


$ virtualenv moje_srodowisko –-no-site-packages 
$ cd moje_srodowisko
  $ source bin/activate 
(moje_srodowisko)~/moje_srodowisko$ 
 
Wdrażanie Django z Buildout


$ mkdir app 
$ cd app 
$ wget
  http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstra
  p/bootstrap.py 
$ touch buildout.cfg
Konfiguracja Buildout dla Django 


# buildout.cfg 
 
[buildout]  
parts = django
  
[django] 
recipe = djangorecipe 
version = 1.1
     
       
Rozruch Buildout'a

$ python bootstrap.py
     Creating directory 'moje_srodowisko/app/bin'.
     Creating directory 'moje_srodowisko/app/parts'.
     Creating directory 'moje_srodowisko/app/eggs'.
     Creating directory 'moje_srodowisko/app/develop-eggs'.
     Generated script 'moje_srodowisko/app/bin/buildout'.
     
       
Instalacja Django
$ bin/buildout
      Getting distribution for 'djangorecipe'.
      Got djangorecipe 0.19.1.
      Getting distribution for 'zc.recipe.egg'.
      Got zc.recipe.egg 1.2.2.
      Installing django.
      django: Downloading Django from:
  http://www.djangoproject.com/download/1.0/tarball/
      Generated script 'moje_srodowisko/app/bin/django'.

    
Uruchomienie aplikacji

• bin/django runserver   #!/moje_srodowisko/bin/python
• bin/django syncdb      import sys
• itd.                   sys.path[0:0] = [
                           '/moje_srodowisko/app/parts/moj_pakiet1',
                           '/moje_srodowisko/app/parts/moj_pakiet2',
                          ]

                         import djangorecipe.manage

                         if __name__ == '__main__':
                             djangorecipe.manage.main('moj_projekt.settings')
Jak wdrożyć swój projekt
# buildout.cfg
  [buildout] 
parts = django moj_projekt
 
[django]
recipe = djangorecipe
version = 1.1    
settings = settings
projectegg = moj_projekt 
.
.
  .
Jak wdrożyć swój projekt
# buildout.cfg
.
.
   eggs =
           south
           django-registration
   extra-paths =
           ${buildout:parts-directory}
     
[moj_projekt] 
recipe = iw.recipe.subversion 
urls = 
    http://moje_repo.com/trunk/moj_projekt_z_svn/ .
Jak wdrożyć swój projekt
$ bin/buildout     
    .
    .
       Installing moj_projekt.
       A    moje_srodowisko/app/parts/moj_projekt/settings.py

        .
        .
        Checked out revision 1.
        Creating archive: .-dev.tar.gz
mod_wsgi ? fcgi ?


djangorecipe umożliwia generowanie skryptów WSGI oraz FCGI

    •  opcja: wsgi = true lub,
                                 ./bin/django.wsgi
    •  opcja: fcgi = true.
                                 ./bin/django.fcgi
 
 
Podsumowanie


• Buildout automatyzuje wdrożenia projektu,
• Virtualenv odizolowuje pakiety od systemowego site-
  packages,
• djangorecipe umożliwia generowanie skryptów
  rozruchowych dla WSGI i FCGI,
Przydatne linki

•   http://www.buildout.org 
•   http://pypi.python.org/pypi/zc.buildout 
•   http://pypi.python.org/pypi/djangorecipe/
•   http://www.sixfeetup.com/swag/buildout-quick-reference-card
•   http://www.doughellmann.com/projects/virtualenvwrapper/
Dziękuję za uwagę!
Bibliografia - media

•   http://farm4.static.flickr.com/3237/2796908072_63dbb1e52d_o_d.jpg
•   http://farm3.static.flickr.com/2599/3920111676_b69ce1138d_b_d.jpg 
•   http://farm1.static.flickr.com/6/86227485_2bd48ad7f6_o_d.jpg
•   ikony: http://graffletopia.com/stencils/144

More Related Content

What's hot

Angular js warsztaty stopień 2
Angular js   warsztaty stopień 2Angular js   warsztaty stopień 2
Angular js warsztaty stopień 2Marcin Wosinek
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Tomasz Dziuda
 
Szybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJSSzybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJSThe Software House
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaTomasz Dziuda
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendiumTomasz Dziuda
 
CDI Portable Extensions
CDI Portable ExtensionsCDI Portable Extensions
CDI Portable ExtensionsAdam Warski
 

What's hot (8)

Angular js warsztaty stopień 2
Angular js   warsztaty stopień 2Angular js   warsztaty stopień 2
Angular js warsztaty stopień 2
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
 
Szybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJSSzybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJS
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
 
Docker
DockerDocker
Docker
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendium
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
CDI Portable Extensions
CDI Portable ExtensionsCDI Portable Extensions
CDI Portable Extensions
 

Viewers also liked

ZamCamp - Django – webowy framework dla perfekcjonistów
ZamCamp - Django – webowy framework dla perfekcjonistów ZamCamp - Django – webowy framework dla perfekcjonistów
ZamCamp - Django – webowy framework dla perfekcjonistów zamcamp
 
ZamCamp #4 - Gry MMORPG
ZamCamp #4 - Gry MMORPGZamCamp #4 - Gry MMORPG
ZamCamp #4 - Gry MMORPGzamcamp
 
Django - 3 lata prac i wszystko, co mamy, to marne 1.0
Django - 3 lata prac i wszystko, co mamy, to marne 1.0Django - 3 lata prac i wszystko, co mamy, to marne 1.0
Django - 3 lata prac i wszystko, co mamy, to marne 1.0Marcin Kaszynski
 
Two scoops of Django - Deployment
Two scoops of Django - DeploymentTwo scoops of Django - Deployment
Two scoops of Django - Deploymentflywindy
 
Working with the django admin
Working with the django admin Working with the django admin
Working with the django admin flywindy
 
Getting Started With Django
Getting Started With DjangoGetting Started With Django
Getting Started With Djangojeff_croft
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of DjangoJacob Kaplan-Moss
 
Customizing the Django Admin
Customizing the Django AdminCustomizing the Django Admin
Customizing the Django AdminLincoln Loop
 
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesDjangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesNina Zakharenko
 
Advanced Django Forms Usage
Advanced Django Forms UsageAdvanced Django Forms Usage
Advanced Django Forms UsageDaniel Greenfeld
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSHannes Hapke
 
Django best practices for logging and signals
Django best practices for logging and signals Django best practices for logging and signals
Django best practices for logging and signals flywindy
 

Viewers also liked (14)

Kaja Milanowska, Django
Kaja Milanowska, DjangoKaja Milanowska, Django
Kaja Milanowska, Django
 
ZamCamp - Django – webowy framework dla perfekcjonistów
ZamCamp - Django – webowy framework dla perfekcjonistów ZamCamp - Django – webowy framework dla perfekcjonistów
ZamCamp - Django – webowy framework dla perfekcjonistów
 
ZamCamp #4 - Gry MMORPG
ZamCamp #4 - Gry MMORPGZamCamp #4 - Gry MMORPG
ZamCamp #4 - Gry MMORPG
 
Django - 3 lata prac i wszystko, co mamy, to marne 1.0
Django - 3 lata prac i wszystko, co mamy, to marne 1.0Django - 3 lata prac i wszystko, co mamy, to marne 1.0
Django - 3 lata prac i wszystko, co mamy, to marne 1.0
 
Two scoops of Django - Deployment
Two scoops of Django - DeploymentTwo scoops of Django - Deployment
Two scoops of Django - Deployment
 
Working with the django admin
Working with the django admin Working with the django admin
Working with the django admin
 
Getting Started With Django
Getting Started With DjangoGetting Started With Django
Getting Started With Django
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of Django
 
Customizing the Django Admin
Customizing the Django AdminCustomizing the Django Admin
Customizing the Django Admin
 
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 MinutesDjangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
Djangocon 2014 - Django REST Framework - So Easy You Can Learn it in 25 Minutes
 
Advanced Django Forms Usage
Advanced Django Forms UsageAdvanced Django Forms Usage
Advanced Django Forms Usage
 
Django Best Practices
Django Best PracticesDjango Best Practices
Django Best Practices
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJS
 
Django best practices for logging and signals
Django best practices for logging and signals Django best practices for logging and signals
Django best practices for logging and signals
 

Similar to Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP3camp
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Tomasz Dziuda
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnieCode-House
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Grzegorz Bartman
 
Vagrant - RuPy Tuesday
Vagrant - RuPy TuesdayVagrant - RuPy Tuesday
Vagrant - RuPy TuesdayGaldoMedia
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceDawid Urbański
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerLukas Lesniewski
 
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Meet Magento Poland
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z CapistranoMichał Szajbe
 
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) Laravel Poland MeetUp
 
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Sagittario
 
Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieArtur Radosz
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 

Similar to Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django (20)

Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnie
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
 
Grok Prezentacja
Grok PrezentacjaGrok Prezentacja
Grok Prezentacja
 
Vagrant - RuPy Tuesday
Vagrant - RuPy TuesdayVagrant - RuPy Tuesday
Vagrant - RuPy Tuesday
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
 
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane środowisko deweloperskie.
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
 
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
 
Vagrant workshop
Vagrant workshopVagrant workshop
Vagrant workshop
 
Środowisko PWA
Środowisko PWAŚrodowisko PWA
Środowisko PWA
 
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
 
Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - Wprowadzenie
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 

Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django

  • 1. Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django Dominik Szopa http://dominno.pl PyCon PL 2009 16-18 październik 2009
  • 2. Agenda • Django - wdrażanie projektów, • Virtualenv i Buildout, • Buildout i Django, • Podsumowanie, • Przydatne linki.      
  • 3. Django - wdrażanie projektów Każdy projekt składa się z wielu zależności:   • Django, • Aplikacje zewnętrzne(np. django-tagging), • Biblioteki(np. docutils, beautyfullsoap).    
  • 4. Django - wdrażanie projektów Zależności mogą być instalowane z wielu źródeł: • Systemu kontroli wersji, • Używając setup.py, • Używając setuptools i easy_install.
  • 5. Django - wdrażanie projektów Wielokrotna instalacja i konfiguracja na: • Komputerach developerów, • Serwerze, • Wszystkich innych maszynach które mają coś wspólnego z developmentem.  
  • 6. Django - wdrażanie projektów Złe praktyki:   • Instalacja zależności w systemowym site-packages, • Umieszczanie projektu wraz z pakietami zależnymi w katalogach, które nie są zdefiniowane w PYTHONPATH.   Mogą prowadzić w rezultacie do:
  • 7.
  • 9. Co to jest virtualenv ? • Tworzy odseparowane, $ virtualenv moj_env niezależne środowisko $ source bin/activate  Pythona, (moj_env) $ cd jakas_biblioteka • Odizolowuje pakiety (moj_env) $ setup.py install od systemowego site- (moj_env) $ deactivate packages.  
  • 10. Wady virtualenv • Nie rozwiązuje problemu ręcznej instalacji pakietów, • Środowiska nie są przenośne, • Środowiska nie są portowalne.
  • 11. Co to jest buildout ? • Automatyzuje instalacje zależności projektu, • Projekt składa się z poszczególnych składników, definiowanych w pliku konfiguracyjnym, • Do konfiguracji oraz instalacji określonego składnika, używane są rozszerzenia zwane "recipes" (przepisy), • Każdy składnik zawiera informacje skąd pobrać dane oraz gdzie je zapisać.
  • 12. Istnieją przepisy które: • Pobierają pakiety i instalują je w formie eggów, • Pobierają źródła z systemu kontroli wersji, • Tworzą symlinki, • Wykonują polecenia systemowe, • Pobierają i kompilują pakiety binarne, • Więcej na http://pypi.python.org, 160+ dostępnych.  
  • 13. Buildout - przykład $ buildout [buildout]    parts = part1 part2          PyPi               moje repo   [part1]     recipe = moj_przepis   [part2]     recipe = moj_inny_przepis                  mój desktop $ python >>> import part1 >>> import part2
  • 14. Buildout i Django Istnieje przepis "djangorecipe" dla Django który: • pobiera i instaluje Django w wskazanej wersji, • tworzy skrypt-nakładkę na manage.py w którym są wpisane ścieżki do wszystkich zainstalowanych zależności przez Buildout.
  • 15. Buildout i Django - w szczegółach
  • 16. Co będzie potrzebne • Python, • virtualenv, • bootstrap.py  z http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/b ootstrap.py, • terminal.
  • 17. Tworzenie środowiska $ virtualenv moje_srodowisko –-no-site-packages  $ cd moje_srodowisko $ source bin/activate  (moje_srodowisko)~/moje_srodowisko$   
  • 18. Wdrażanie Django z Buildout $ mkdir app  $ cd app  $ wget http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstra p/bootstrap.py  $ touch buildout.cfg
  • 19. Konfiguracja Buildout dla Django  # buildout.cfg    [buildout]   parts = django    [django]  recipe = djangorecipe  version = 1.1         
  • 20. Rozruch Buildout'a $ python bootstrap.py    Creating directory 'moje_srodowisko/app/bin'.    Creating directory 'moje_srodowisko/app/parts'.    Creating directory 'moje_srodowisko/app/eggs'.    Creating directory 'moje_srodowisko/app/develop-eggs'.    Generated script 'moje_srodowisko/app/bin/buildout'.         
  • 21. Instalacja Django $ bin/buildout     Getting distribution for 'djangorecipe'.     Got djangorecipe 0.19.1.     Getting distribution for 'zc.recipe.egg'.     Got zc.recipe.egg 1.2.2.     Installing django.     django: Downloading Django from: http://www.djangoproject.com/download/1.0/tarball/     Generated script 'moje_srodowisko/app/bin/django'.   
  • 22. Uruchomienie aplikacji • bin/django runserver #!/moje_srodowisko/bin/python • bin/django syncdb import sys • itd. sys.path[0:0] = [   '/moje_srodowisko/app/parts/moj_pakiet1',   '/moje_srodowisko/app/parts/moj_pakiet2',  ] import djangorecipe.manage if __name__ == '__main__':     djangorecipe.manage.main('moj_projekt.settings')
  • 23. Jak wdrożyć swój projekt # buildout.cfg [buildout]  parts = django moj_projekt   [django] recipe = djangorecipe version = 1.1     settings = settings projectegg = moj_projekt  . . .
  • 24. Jak wdrożyć swój projekt # buildout.cfg . . eggs =         south         django-registration extra-paths =         ${buildout:parts-directory}    [moj_projekt]  recipe = iw.recipe.subversion  urls =      http://moje_repo.com/trunk/moj_projekt_z_svn/ .
  • 25. Jak wdrożyć swój projekt $ bin/buildout          .     .     Installing moj_projekt.     A    moje_srodowisko/app/parts/moj_projekt/settings.py     .     .     Checked out revision 1.     Creating archive: .-dev.tar.gz
  • 26. mod_wsgi ? fcgi ? djangorecipe umożliwia generowanie skryptów WSGI oraz FCGI •  opcja: wsgi = true lub, ./bin/django.wsgi •  opcja: fcgi = true.   ./bin/django.fcgi    
  • 27. Podsumowanie • Buildout automatyzuje wdrożenia projektu, • Virtualenv odizolowuje pakiety od systemowego site- packages, • djangorecipe umożliwia generowanie skryptów rozruchowych dla WSGI i FCGI,
  • 28. Przydatne linki • http://www.buildout.org  • http://pypi.python.org/pypi/zc.buildout  • http://pypi.python.org/pypi/djangorecipe/ • http://www.sixfeetup.com/swag/buildout-quick-reference-card • http://www.doughellmann.com/projects/virtualenvwrapper/
  • 30. Bibliografia - media • http://farm4.static.flickr.com/3237/2796908072_63dbb1e52d_o_d.jpg • http://farm3.static.flickr.com/2599/3920111676_b69ce1138d_b_d.jpg  • http://farm1.static.flickr.com/6/86227485_2bd48ad7f6_o_d.jpg • ikony: http://graffletopia.com/stencils/144