SlideShare a Scribd company logo
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

More Related Content

KEY
Sociala medier och intranät
KEY
Unconference och Open Space
KEY
Django Deployment with Fabric
PDF
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
PDF
The Outcome Economy
PDF
The Six Highest Performing B2B Blog Post Formats
PDF
Visual Design with Data
PDF
3 Things Every Sales Team Needs to Be Thinking About in 2017
Sociala medier och intranät
Unconference och Open Space
Django Deployment with Fabric
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
The Outcome Economy
The Six Highest Performing B2B Blog Post Formats
Visual Design with Data
3 Things Every Sales Team Needs to Be Thinking About in 2017

Similar to Virtualenv och Buildout med Django (20)

PDF
Metodik - Versionshantering, pakethantering, paketering och testning
KEY
PDF
Molntjänster som it superhjältar
PDF
Docker i produktion på NyA
PDF
HT23 - DA354A - Webbprogrammering med Python
PDF
DA354B - Introduktion till programmering - Webbprogrammering
PPTX
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
PDF
Xpages för utvecklare
PPTX
Grunt och gulp
PDF
Cygni Powertools 1.0
PDF
HT19 - DA354A - Webbprogrammering med bottle
PDF
HT17 - DA354A - Webbapplikation
PDF
Varje resa börjar med ett litet steg (internetdagarna 2011)
PDF
Webboptimering 25 min
PDF
Mindre och snabbare – Cache tips for WordPress developers
PDF
VT2018 - DA355A - Phonegap, react, vue.js
PPTX
Uppgift6 med anteck
PDF
HT18 - DA354A - Bottle web app
PDF
VT2018 - DA355A - LocalStorage & Bootstrap
PDF
HT19 - DA156A - Introduktion till JavaScript
Metodik - Versionshantering, pakethantering, paketering och testning
Molntjänster som it superhjältar
Docker i produktion på NyA
HT23 - DA354A - Webbprogrammering med Python
DA354B - Introduktion till programmering - Webbprogrammering
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
Xpages för utvecklare
Grunt och gulp
Cygni Powertools 1.0
HT19 - DA354A - Webbprogrammering med bottle
HT17 - DA354A - Webbapplikation
Varje resa börjar med ett litet steg (internetdagarna 2011)
Webboptimering 25 min
Mindre och snabbare – Cache tips for WordPress developers
VT2018 - DA355A - Phonegap, react, vue.js
Uppgift6 med anteck
HT18 - DA354A - Bottle web app
VT2018 - DA355A - LocalStorage & Bootstrap
HT19 - DA156A - Introduktion till JavaScript
Ad

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