SlideShare una empresa de Scribd logo
1 de 24
Virtualenv och buildout
           Jonas Nockert
      jonasnockert@gmail.com
             @lemonad
Varför virtualenv?
• Använd senaste Django och relaterade
  moduler utan risk att andra projekt slutar
  fungera
• Mer kontroll över miljön dina Django-
  projekt körs i
• Installera och testa saker utan att hela
  systemet påverkas
Hur installerar jag?

$ port install py26-virtualenv

eller...
$ apt-get install python-virtualenv

eller...
$ easy_install virtualenv
Skapa ett projekt

$ virtualenv2.6 mitt-projekt

eller, ännu hellre...
$ virtualenv2.6 --no-site-packages mitt-projekt



(med MacPorts)
Aktivera virtuell miljö

  $ cd mitt-projekt
  $ source bin/activate
  (mitt-projekt) $




• Håll koll på virtualenv-parenteserna!
Installera
  (mitt-projekt) $ easy_install django
  ...
  Installed /Users/jonas/mitt-projekt/lib/python2.6/
  site-packages/Django-1.1-py2.6.egg
  ...
  (mitt-projekt) $ django-admin.py startproject hello




• Inget sudo så långt ögat når.
deaktivera!


(mitt-projekt) $ deactivate
$
Toppen! Fast...
• Du behöver fortfarande återskapa allt varje
  gång du installerar ditt projekt
  ... på din bärbara
  ... på din server
  ... och på alla andra ställen där du utvecklar.
• Du kan inte lyfta över miljön till en annan
  plattform
Batteries included?

• Även om batterier ingår så är det en hel del
  till man oftast behöver:
  django-tagging
  south
  python-oauth
och...
• PIL
• python-memcached
• Markdown
• JQuery
• ...och helst specifika versioner som man vet
  fungerar bra ihop.
Dependencies

• ...och så var det alla dependencies som är
  utspridda på github, bitbucket, google code
  och ftp-servrar


• (hur var det nu man byggde PIL igen?)
Hej Buildout!

• Börja med att ladda hem bootstrap.py som
  sätter upp buildout:
  (mitt-projekt) $ curl -O http://svn.zope.org/
  *checkout*/zc.buildout/trunk/bootstrap/bootstrap.py




• Varför inte bara easy_install zc.buildout när
  man nu använder virtualenv?
Bootstrap

• Kör bootstrap.py (men glöm inte att först
  aktivera virtualenv)
  (mitt-projekt) $ python bootstrap.py init


• Init-flaggan skapar en konfigurationsfil för
  buildout, skippa den ifall du redan har en.
Redigera buildout.cfg
[buildout]
parts = opt libjpeg PIL django-1.1
eggs = django-tagging==0.3.0

[django-1.1]
recipe = djangorecipe
version = 1.1
project = exampleproject
settings = production
test = exampleapp
testrunner = test-1.1
wsgi = true
eggs = ${buildout:eggs}

[opt]
recipe = plone.recipe.command
location = ${buildout:parts-directory}/opt
command = mkdir ${opt:location} && mkdir ${opt:location}/bin && mkdir -p ${opt:location}/man/man1
update-command = ${opt:command}

[libjpeg]
recipe = zc.recipe.cmmi
url = http://www.ijg.org/files/jpegsrc.v7.tar.gz
extra_options = --prefix=${opt:location}

[PIL]
recipe = plone.recipe.command
command = ${buildout:directory}/bin/easy_install -i http://dist.serverzen.com/pypi/simple PILwoTk
update-command = ${PIL:command}
Fika

  (mitt-projekt) $ ./bin/buildout




• Det här kan ta lite tid...
Buildout-recept
• Det finns recept för det mesta:
  Checka ut från subversion, git, hg...
  Ladda hem och installera tarballs
  Utföra kommandon i terminalen
• Man kan köra parallella Django-recept, t.ex.
  1.1 och trunk.
?!?

• Kolla oväntade dependencies i eggs-foldern
  ifall du kör parallella django-recept. Kanske
  drogs Django 1.1 in av t.ex. django-flash och
  körs istället för trunk.
Djangorecipe
• Skapar en wrapper runt manage.py vilken
  laddar alla eggs och andra dependencies.
  (mitt-projekt) $ django-1.1 shell


• Kan automatiskt generera wsgi-
  konfigurationsfiler
  wsgi = True

  ./bin/django-1.1.wsgi
Massor av recept via pypi
(http://pypi.python.org/)
Versionskontroll

• Det finns massor av filer i mitt bibliotek,
  vad skall jag checka in?
  .gitignore
  bootstrap.py
  buildout.cfg
  mitt_djangoprojekt
Versionskontroll
• Automatskapade filer läggs i .gitignore:
  *.pyc
  *.pyo
  .installed.cfg
  .Python
  bin
  develop-eggs
  dist
  downloads
  eggs
  include
  lib
  parts
Checka ut

$ git clone git://github.com/lemonad/mitt-projekt.git
$ virtualenv2.6 --no-site-packages mitt-projekt
$ cd mitt-projekt
$ source bin/activate
(mitt-projekt) $ python bootstrap.py
(mitt-projekt) $ bin/buildout
(mitt-projekt) $ django-trunk runserver
Hostout


• Buildout-recept för deployment
• http://plone.org/products/collective.hostout
http://lemonad.jaiku.com
http://twitter.com/lemonad

Más contenido relacionado

Similar a Virtualenv och Buildout med Django

Metodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testningMetodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testningJohan Holmberg
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältarPer Åström
 
Docker i produktion på NyA
Docker i produktion på NyADocker i produktion på NyA
Docker i produktion på NyAJonananas
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonAnton Tibblin
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleHT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleAnton Tibblin
 
Xpages för utvecklare
Xpages för utvecklareXpages för utvecklare
Xpages för utvecklareThomas Adrian
 
Cygni Powertools 1.0
Cygni Powertools 1.0Cygni Powertools 1.0
Cygni Powertools 1.0guesta1bbb
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleAnton Tibblin
 
HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationAnton Tibblin
 
Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Per Åström
 
Webboptimering 25 min
Webboptimering 25 minWebboptimering 25 min
Webboptimering 25 minFredrik Wendt
 
Mindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developersMindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developersSeravo
 
VT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsVT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsAnton Tibblin
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appAnton Tibblin
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapAnton Tibblin
 
HT19 - DA156A - Introduktion till JavaScript
HT19 - DA156A - Introduktion till JavaScriptHT19 - DA156A - Introduktion till JavaScript
HT19 - DA156A - Introduktion till JavaScriptAnton Tibblin
 
HT18 - DA156A - Webben och JavaScript
HT18 - DA156A - Webben och JavaScriptHT18 - DA156A - Webben och JavaScript
HT18 - DA156A - Webben och JavaScriptAnton Tibblin
 

Similar a Virtualenv och Buildout med Django (20)

Metodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testningMetodik - Versionshantering, pakethantering, paketering och testning
Metodik - Versionshantering, pakethantering, paketering och testning
 
OPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! LoadimpactOPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! Loadimpact
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältar
 
Docker i produktion på NyA
Docker i produktion på NyADocker i produktion på NyA
Docker i produktion på NyA
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med Python
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleHT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
 
Xpages för utvecklare
Xpages för utvecklareXpages för utvecklare
Xpages för utvecklare
 
Grunt och gulp
Grunt och gulpGrunt och gulp
Grunt och gulp
 
Cygni Powertools 1.0
Cygni Powertools 1.0Cygni Powertools 1.0
Cygni Powertools 1.0
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottle
 
HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - Webbapplikation
 
Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)
 
Webboptimering 25 min
Webboptimering 25 minWebboptimering 25 min
Webboptimering 25 min
 
Mindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developersMindre och snabbare – Cache tips for WordPress developers
Mindre och snabbare – Cache tips for WordPress developers
 
VT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.jsVT2018 - DA355A - Phonegap, react, vue.js
VT2018 - DA355A - Phonegap, react, vue.js
 
Uppgift6 med anteck
Uppgift6 med anteckUppgift6 med anteck
Uppgift6 med anteck
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web app
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & Bootstrap
 
HT19 - DA156A - Introduktion till JavaScript
HT19 - DA156A - Introduktion till JavaScriptHT19 - DA156A - Introduktion till JavaScript
HT19 - DA156A - Introduktion till JavaScript
 
HT18 - DA156A - Webben och JavaScript
HT18 - DA156A - Webben och JavaScriptHT18 - DA156A - Webben och JavaScript
HT18 - DA156A - Webben och JavaScript
 

Virtualenv och Buildout med Django

  • 1. Virtualenv och buildout Jonas Nockert jonasnockert@gmail.com @lemonad
  • 2. Varför virtualenv? • Använd senaste Django och relaterade moduler utan risk att andra projekt slutar fungera • Mer kontroll över miljön dina Django- projekt körs i • Installera och testa saker utan att hela systemet påverkas
  • 3. Hur installerar jag? $ port install py26-virtualenv eller... $ apt-get install python-virtualenv eller... $ easy_install virtualenv
  • 4. Skapa ett projekt $ virtualenv2.6 mitt-projekt eller, ännu hellre... $ virtualenv2.6 --no-site-packages mitt-projekt (med MacPorts)
  • 5. Aktivera virtuell miljö $ cd mitt-projekt $ source bin/activate (mitt-projekt) $ • Håll koll på virtualenv-parenteserna!
  • 6. Installera (mitt-projekt) $ easy_install django ... Installed /Users/jonas/mitt-projekt/lib/python2.6/ site-packages/Django-1.1-py2.6.egg ... (mitt-projekt) $ django-admin.py startproject hello • Inget sudo så långt ögat når.
  • 8. Toppen! Fast... • Du behöver fortfarande återskapa allt varje gång du installerar ditt projekt ... på din bärbara ... på din server ... och på alla andra ställen där du utvecklar. • Du kan inte lyfta över miljön till en annan plattform
  • 9. Batteries included? • Även om batterier ingår så är det en hel del till man oftast behöver: django-tagging south python-oauth
  • 10. och... • PIL • python-memcached • Markdown • JQuery • ...och helst specifika versioner som man vet fungerar bra ihop.
  • 11. Dependencies • ...och så var det alla dependencies som är utspridda på github, bitbucket, google code och ftp-servrar • (hur var det nu man byggde PIL igen?)
  • 12. Hej Buildout! • Börja med att ladda hem bootstrap.py som sätter upp buildout: (mitt-projekt) $ curl -O http://svn.zope.org/ *checkout*/zc.buildout/trunk/bootstrap/bootstrap.py • Varför inte bara easy_install zc.buildout när man nu använder virtualenv?
  • 13. Bootstrap • Kör bootstrap.py (men glöm inte att först aktivera virtualenv) (mitt-projekt) $ python bootstrap.py init • Init-flaggan skapar en konfigurationsfil för buildout, skippa den ifall du redan har en.
  • 14. Redigera buildout.cfg [buildout] parts = opt libjpeg PIL django-1.1 eggs = django-tagging==0.3.0 [django-1.1] recipe = djangorecipe version = 1.1 project = exampleproject settings = production test = exampleapp testrunner = test-1.1 wsgi = true eggs = ${buildout:eggs} [opt] recipe = plone.recipe.command location = ${buildout:parts-directory}/opt command = mkdir ${opt:location} && mkdir ${opt:location}/bin && mkdir -p ${opt:location}/man/man1 update-command = ${opt:command} [libjpeg] recipe = zc.recipe.cmmi url = http://www.ijg.org/files/jpegsrc.v7.tar.gz extra_options = --prefix=${opt:location} [PIL] recipe = plone.recipe.command command = ${buildout:directory}/bin/easy_install -i http://dist.serverzen.com/pypi/simple PILwoTk update-command = ${PIL:command}
  • 15. Fika (mitt-projekt) $ ./bin/buildout • Det här kan ta lite tid...
  • 16. Buildout-recept • Det finns recept för det mesta: Checka ut från subversion, git, hg... Ladda hem och installera tarballs Utföra kommandon i terminalen • Man kan köra parallella Django-recept, t.ex. 1.1 och trunk.
  • 17. ?!? • Kolla oväntade dependencies i eggs-foldern ifall du kör parallella django-recept. Kanske drogs Django 1.1 in av t.ex. django-flash och körs istället för trunk.
  • 18. Djangorecipe • Skapar en wrapper runt manage.py vilken laddar alla eggs och andra dependencies. (mitt-projekt) $ django-1.1 shell • Kan automatiskt generera wsgi- konfigurationsfiler wsgi = True ./bin/django-1.1.wsgi
  • 19. Massor av recept via pypi (http://pypi.python.org/)
  • 20. Versionskontroll • Det finns massor av filer i mitt bibliotek, vad skall jag checka in? .gitignore bootstrap.py buildout.cfg mitt_djangoprojekt
  • 21. Versionskontroll • Automatskapade filer läggs i .gitignore: *.pyc *.pyo .installed.cfg .Python bin develop-eggs dist downloads eggs include lib parts
  • 22. Checka ut $ git clone git://github.com/lemonad/mitt-projekt.git $ virtualenv2.6 --no-site-packages mitt-projekt $ cd mitt-projekt $ source bin/activate (mitt-projekt) $ python bootstrap.py (mitt-projekt) $ bin/buildout (mitt-projekt) $ django-trunk runserver
  • 23. Hostout • Buildout-recept för deployment • http://plone.org/products/collective.hostout