Arbeiten mit distribute,
  pip und virtualenv
         Markus Zapke-Gründemann
  11. DZUG-Tagung zu Zope, Plone und Python
Markus
    Zapke-Gründemann
•   Softwareentwickler seit 2001

•   Schwerpunkt: Web Application Development
    mit Python ...
Überblick
•   Vorstellung der Werkzeuge   •   Einsatz in der Praxis

    •   distribute                  •   modern-packag...
Vorstellung der
  Werkzeuge
Python Packaging




Quelle: http://guide.python-distribute.org/introduction.html#current-state-of-packaging
distribute

•   Fork des setuptools Pakets

•   Erweitert distutils

•   Stellt setuptools für Pakete zur Verfügung,
    d...
distribute installieren

$ wget http://python-distribute.org/distribute_setup.py
$ python distribute_setup.py



 1. Entfe...
distutils2
•   Tarek Ziadé: „A toolbox for third packaging
    tools“

•   PEP 345: Metadata for Python Software
    Packa...
pip
•   „pip installs packages“     •   Protokollieren der Aktionen

•   Ersatz für easy_install     •   Kann einen URL od...
Design done by Idan Gazit (http://pixane.com) - License: cc-by-3.0
virtualenv

•   Isolierte Python Umgebungen

•   Unterstützung für distribute

•   Kann mit WSGI Containern benutzt werden...
virtualenv: Isolierte
    Python Umgebungen

•   Python Version wählbar (zum Teil als Symlink)

•   Eigenes bin Verzeichni...
virtualenv: Struktur
testenv/
|-- bin
|   |-- activate
|   |-- activate_this.py
|   |-- easy_install
|   |-- easy_install-...
virtualenvwrapper
    •   Erweiterung für virtualenv

    •   Erleichtern das Erstellen, Löschen und
        Management de...
Einsatz in der Praxis
modern-package-template
modern-package-template

 •   PasteScript Template

     •   distribute

     •   buildout

 •   Autor: Sridhar Ratnakumar...
modern-package-template
$ paster create -t modern_package testpackage
Selected and implied templates:
  modern-package-tem...
modern-package-template
  Verzeichnisstruktur
   testpackage/
   |-- .gitignore
   |-- .hgignore
   |-- HACKING.txt
   |--...
virtualenv
virtualenv anlegen

zappi ~$ virtualenv testenv
New python executable in testenv/bin/python
Installing setuptools............
virtualenv aktivieren
             und deaktivieren

zappi ~/$ cd testenv
zappi ~/testenv$ . bin/activate
(testenv)zappi ~...
virtualenvwrapper
mkvirtualenv
zappi ~$ mkvirtualenv testenv
New python executable in testenv/bin/python
Installing setuptools............do...
mkvirtualenv
zappi ~$ mkvirtualenv --no-site-packages --distribute testenv
New python executable in testenv/bin/python
Ins...
cdvirtualenv


(testenv)zappi ~$ cdvirtualenv
(testenv)zappi ~/.virtualenvs/testenv$
lssitepackages

(testenv)zappi ~$ lssitepackages
distribute-0.6.10-py2.6.egg easy-install.pth       pip-0.7.1-py2.6.egg
se...
cdsitepackages

(testenv)zappi ~$ cdsitepackages
(testenv)zappi ~/.virtualenvs/testenv/lib/python2.6/site-packages$ ls -l
...
add2virtualenv

(testenv)zappi ~/Projekte/Python$ add2virtualenv django-dev
Warning: Converting "django-dev" to "/Users/za...
deactivate


(testenv)zappi ~$ deactivate
zappi ~$
workon


zappi ~$ workon testenv
(testenv)zappi ~$
rmvirtualenv


(testenv)zappi ~$ rmvirtualenv testenv
ERROR: You cannot remove the active environment ('testenv').
Either ...
Hooks
~/.virtualenvs/testenv/bin/
|-- get_env_details
|-- postactivate
|-- postdeactivate
|-- preactivate
`-- predeactivat...
pip
pip install
$ pip install Markdown
Downloading/unpacking Markdown
  Downloading Markdown-2.0.3.zip (94Kb): 94Kb downloaded...
pip install
$ pip install Django==1.1.2

$ pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz

$ pip install -e ...
pip install
$ cat requirements.txt
Django==1.1.2
nose==0.11
-e svn+http://mycompany/svn/MyApp/trunk@1045#egg=MyApp
-e svn+...
pip install
$ pip install -E ~/.virtualenvs/devenv -r requirements.txt
Downloading/unpacking nose==0.11 (from -r requireme...
pip install
$ pip install anyjson boo
Downloading/unpacking anyjson
  Downloading anyjson-0.2.4.tar.gz
  Running setup.py ...
pip uninstall
$ pip uninstall Markdown
Uninstalling Markdown:
  /Users/zappi/.virtualenvs/testenv/bin/markdown
  /Users/za...
pip & PyPI Mirrors

PEP 381: Mirroring infrastructure for PyPI

$ pip install --use-mirrors Django

                   ode...
pip freeze
$ pip freeze
Django==1.2.1
amqplib==0.6.1
anyjson==0.2.4
billiard==0.3.1
carrot==0.10.5
celery==1.0.5
distribut...
pip search
$ pip search markdown
Markdoc                   - A lightweight Markdown-based wiki build tool.
markdown2      ...
pip completion

$ pip completion --bash >> ~/.profile

$ pip completion --zsh >> ~/.zprofile
Links
•   http://pypi.python.org/pypi/distribute

•   http://guide.python-distribute.org/

•   http://pip.openplans.org/

...
Lizenz

       Dieses Werk ist unter einem Creative Commons
Namensnennung-Weitergabe unter gleichen Bedingungen 3.0
      ...
Arbeiten mit distribute, pip und virtualenv
Upcoming SlideShare
Loading in...5
×

Arbeiten mit distribute, pip und virtualenv

1,918

Published on

distribute und pip als Ersatz für setuptools und easy_install bieten im Zusammenspiel mit virtualenv viele neue Möglichkeiten bei der Entwicklung und dem Deployment von Python-Applikationen. In diesem Vortrag stelle ich alle Werkzeuge kurz vor und zeige, wie man sie zusammen einsetzen kann.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,918
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Arbeiten mit distribute, pip und virtualenv

  1. 1. Arbeiten mit distribute, pip und virtualenv Markus Zapke-Gründemann 11. DZUG-Tagung zu Zope, Plone und Python
  2. 2. Markus Zapke-Gründemann • Softwareentwickler seit 2001 • Schwerpunkt: Web Application Development mit Python und PHP • Django, symfony & Zend Framework • Freier Softwareentwickler und Berater seit 2008 • www.keimlink.de
  3. 3. Überblick • Vorstellung der Werkzeuge • Einsatz in der Praxis • distribute • modern-package- template • distutils2 • virtualenv • pip • virtualenvwrapper • virtualenv • pip • virtualenvwrapper
  4. 4. Vorstellung der Werkzeuge
  5. 5. Python Packaging Quelle: http://guide.python-distribute.org/introduction.html#current-state-of-packaging
  6. 6. distribute • Fork des setuptools Pakets • Erweitert distutils • Stellt setuptools für Pakete zur Verfügung, die davon abhängen • Python 3 Unterstützung • Maintainer: Tarek Ziadé
  7. 7. distribute installieren $ wget http://python-distribute.org/distribute_setup.py $ python distribute_setup.py 1. Entfernen der bestehenden setuptools Installation 2. Installieren einer Fake setuptools Installation 3. Installation von distribute
  8. 8. distutils2 • Tarek Ziadé: „A toolbox for third packaging tools“ • PEP 345: Metadata for Python Software Packages 1.2 • PEP 376: Database of Installed Python Distributions • PEP 386: Changing the version comparison module in Distutils
  9. 9. pip • „pip installs packages“ • Protokollieren der Aktionen • Ersatz für easy_install • Kann einen URL oder ein VCS als Quelle benutzen • Kann Pakete wieder deinstallieren • „requirements“ • Nur vollständige • Unterstüzung für Installationen werden virtualenv durchgeführt • Autor: Ian Bicking • „Sinnvolle“ Ausgaben $ easy_install pip
  10. 10. Design done by Idan Gazit (http://pixane.com) - License: cc-by-3.0
  11. 11. virtualenv • Isolierte Python Umgebungen • Unterstützung für distribute • Kann mit WSGI Containern benutzt werden • Autor: Ian Bicking $ pip install virtualenv
  12. 12. virtualenv: Isolierte Python Umgebungen • Python Version wählbar (zum Teil als Symlink) • Eigenes bin Verzeichnis • Eigenes site-packages Verzeichnis
  13. 13. virtualenv: Struktur testenv/ |-- bin | |-- activate | |-- activate_this.py | |-- easy_install | |-- easy_install-2.6 | |-- pip | |-- python | `-- python2.6 -> python |-- include | `-- python2.6 -> /PREFIX/include/python2.6 `-- lib `-- python2.6 |-- UserDict.py -> /PREFIX/lib/python2.6/UserDict.py |-- ... |-- distutils |-- ... |-- orig-prefix.txt |-- ... |-- site-packages |-- site.py |-- ... `-- warnings.py -> /PREFIX/lib/python2.6/warnings.py
  14. 14. virtualenvwrapper • Erweiterung für virtualenv • Erleichtern das Erstellen, Löschen und Management der virtualenvs • Autor: Doug Hellmann $ pip install virtualenvwrapper $ mkdir ~/.virtualenvs $ export WORKON_HOME=$HOME/.virtualenvs $ source /usr/local/bin/virtualenvwrapper.sh
  15. 15. Einsatz in der Praxis
  16. 16. modern-package-template
  17. 17. modern-package-template • PasteScript Template • distribute • buildout • Autor: Sridhar Ratnakumar $ pip install modern-package-template
  18. 18. modern-package-template $ paster create -t modern_package testpackage Selected and implied templates: modern-package-template#modern_package Package with distribute and buildout support Variables: egg: testpackage package: testpackage project: testpackage Enter version (Version (like 0.1)) ['0.1']: Enter description (One-line description of the package) ['']: A test package. Enter keywords (Space-separated keywords/tags) ['']: test package Enter author (Author name) ['']: Markus Zapke-Gründemann Enter author_email (Author email) ['']: info@keimlink.de Enter url (URL of homepage) ['']: http://www.keimlink.de/ Enter license_name (License name) ['']: BSD Creating template modern_package Creating directory ./testpackage Copying HACKING.txt to ./testpackage/HACKING.txt Copying MANIFEST.in to ./testpackage/MANIFEST.in Copying NEWS.txt to ./testpackage/NEWS.txt Copying README.rst to ./testpackage/README.rst Copying bootstrap.py to ./testpackage/bootstrap.py Copying buildout.cfg_tmpl to ./testpackage/buildout.cfg Copying setup.py_tmpl to ./testpackage/setup.py Running /usr/bin/python setup.py egg_info
  19. 19. modern-package-template Verzeichnisstruktur testpackage/ |-- .gitignore |-- .hgignore |-- HACKING.txt |-- MANIFEST.in |-- NEWS.txt buildout |-- README.rst |-- bootstrap.py distribute |-- buildout.cfg |-- setup.py `-- src |-- testpackage `-- testpackage.egg-info
  20. 20. virtualenv
  21. 21. virtualenv anlegen zappi ~$ virtualenv testenv New python executable in testenv/bin/python Installing setuptools............done. zappi ~$ virtualenv --distribute testenv New python executable in testenv/bin/python Installing distribute................................................ ..................................................................... ............................................................done. $ export VIRTUALENV_USE_DISTRIBUTE=1
  22. 22. virtualenv aktivieren und deaktivieren zappi ~/$ cd testenv zappi ~/testenv$ . bin/activate (testenv)zappi ~/testenv$ deactivate zappi ~/testenv$
  23. 23. virtualenvwrapper
  24. 24. mkvirtualenv zappi ~$ mkvirtualenv testenv New python executable in testenv/bin/python Installing setuptools............done. virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/predeactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/postdeactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/preactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/postactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/get_env_details (testenv)zappi ~$
  25. 25. mkvirtualenv zappi ~$ mkvirtualenv --no-site-packages --distribute testenv New python executable in testenv/bin/python Installing distribute................................................ ..................................................................... ............................................................done. virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/predeactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/postdeactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/preactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/postactivate virtualenvwrapper.user_scripts Creating /Users/zappi/.virtualenvs/ testenv/bin/get_env_details (testenv)zappi ~$
  26. 26. cdvirtualenv (testenv)zappi ~$ cdvirtualenv (testenv)zappi ~/.virtualenvs/testenv$
  27. 27. lssitepackages (testenv)zappi ~$ lssitepackages distribute-0.6.10-py2.6.egg easy-install.pth pip-0.7.1-py2.6.egg setuptools.pth (testenv)zappi ~$ lssitepackages -l total 8 drwxr-xr-x 10 zappi zappi 340 Aug 10 19:22 distribute-0.6.10-py2.6.egg -rw-r--r-- 1 zappi zappi 237 Aug 10 19:22 easy-install.pth drwxr-xr-x 4 zappi zappi 136 Aug 10 19:22 pip-0.7.1-py2.6.egg -rw-r--r-- 1 zappi zappi 30 Aug 10 19:22 setuptools.pth
  28. 28. cdsitepackages (testenv)zappi ~$ cdsitepackages (testenv)zappi ~/.virtualenvs/testenv/lib/python2.6/site-packages$ ls -l total 8 drwxr-xr-x 10 zappi zappi 340 Aug 10 19:22 distribute-0.6.10-py2.6.egg -rw-r--r-- 1 zappi zappi 237 Aug 10 19:22 easy-install.pth drwxr-xr-x 4 zappi zappi 136 Aug 10 19:22 pip-0.7.1-py2.6.egg -rw-r--r-- 1 zappi zappi 30 Aug 10 19:22 setuptools.pth
  29. 29. add2virtualenv (testenv)zappi ~/Projekte/Python$ add2virtualenv django-dev Warning: Converting "django-dev" to "/Users/zappi/Projekte/Python/django-dev" (testenv)zappi ~/Projekte/Python$ lssitepackages distribute-0.6.10-py2.6.egg easy-install.pth pip-0.7.1-py2.6.egg setuptools.pth virtualenv_path_extensions.pth virtualenv_path_extensions.pth: /Users/zappi/Projekte/Python/django-dev
  30. 30. deactivate (testenv)zappi ~$ deactivate zappi ~$
  31. 31. workon zappi ~$ workon testenv (testenv)zappi ~$
  32. 32. rmvirtualenv (testenv)zappi ~$ rmvirtualenv testenv ERROR: You cannot remove the active environment ('testenv'). Either switch to another environment, or run 'deactivate'. (testenv)zappi ~$ deactivate zappi ~$ rmvirtualenv testenv
  33. 33. Hooks ~/.virtualenvs/testenv/bin/ |-- get_env_details |-- postactivate |-- postdeactivate |-- preactivate `-- predeactivate ~/.virtualenvs/ |-- get_env_details |-- initialize |-- postactivate |-- postdeactivate |-- postmkvirtualenv |-- postrmvirtualenv |-- preactivate |-- predeactivate |-- premkvirtualenv `-- prermvirtualenv
  34. 34. pip
  35. 35. pip install $ pip install Markdown Downloading/unpacking Markdown Downloading Markdown-2.0.3.zip (94Kb): 94Kb downloaded Running setup.py egg_info for package Markdown Installing collected packages: Markdown Running setup.py install for Markdown changing mode of build/scripts-2.6/markdown from 644 to 755 changing mode of /Users/zappi/.virtualenvs/testenv/bin/markdown to 755 Successfully installed Markdown Cleaning up...
  36. 36. pip install $ pip install Django==1.1.2 $ pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz $ pip install -e svn+http://svn.myproject.org/svn/MyProject/ trunk#egg=MyProject $ pip install -e svn+http://svn.myproject.org/svn/MyProject/ trunk@2019#egg=MyProject $ pip install --upgrade celery
  37. 37. pip install $ cat requirements.txt Django==1.1.2 nose==0.11 -e svn+http://mycompany/svn/MyApp/trunk@1045#egg=MyApp -e svn+http://mycompany/svn/MyLibrary/trunk@1058#egg=MyLibrary $ pip install -r requirements.txt Downloading/unpacking nose==0.11 (from -r requirements.txt (line 2)) Downloading nose-0.11.0.tar.gz (249Kb): 249Kb downloaded Running setup.py egg_info for package nose no previously-included directories found matching 'doc/.build' Downloading/unpacking Django==1.1.2 (from -r requirements.txt (line 1)) Downloading Django-1.1.2.tar.gz (5.7Mb): 5.7Mb downloaded Running setup.py egg_info for package Django Installing collected packages: Django, nose Running setup.py install for Django changing mode of build/scripts-2.6/django-admin.py from 644 to 755 changing mode of /Users/zappi/.virtualenvs/devenv/bin/django-admin.py to 755 Running setup.py install for nose no previously-included directories found matching 'doc/.build' Installing nosetests-2.6 script to /Users/zappi/.virtualenvs/devenv/bin Installing nosetests script to /Users/zappi/.virtualenvs/devenv/bin Successfully installed Django nose Cleaning up...
  38. 38. pip install $ pip install -E ~/.virtualenvs/devenv -r requirements.txt Downloading/unpacking nose==0.11 (from -r requirements.txt (line 2)) Downloading nose-0.11.0.tar.gz (249Kb): 249Kb downloaded Running setup.py egg_info for package nose no previously-included directories found matching 'doc/.build' Downloading/unpacking Django==1.1.2 (from -r requirements.txt (line 1)) Downloading Django-1.1.2.tar.gz (5.7Mb): 5.7Mb downloaded Running setup.py egg_info for package Django Installing collected packages: Django, nose Found existing installation: Django 1.1.1 Not uninstalling Django at /Library/Python/2.6/site-packages, outside environment / Users/zappi/.virtualenvs/devenv/bin/.. Running setup.py install for Django changing mode of build/scripts-2.6/django-admin.py from 644 to 755 changing mode of /Users/zappi/.virtualenvs/devenv/bin/django-admin.py to 755 Found existing installation: nose 0.11.1 Not uninstalling nose at /Library/Python/2.6/site-packages, outside environment / Users/zappi/.virtualenvs/devenv/bin/.. Running setup.py install for nose no previously-included directories found matching 'doc/.build' Installing nosetests-2.6 script to /Users/zappi/.virtualenvs/devenv/bin Installing nosetests script to /Users/zappi/.virtualenvs/devenv/bin Successfully installed Django nose Cleaning up...
  39. 39. pip install $ pip install anyjson boo Downloading/unpacking anyjson Downloading anyjson-0.2.4.tar.gz Running setup.py egg_info for package anyjson Downloading/unpacking boo Could not find any downloads that satisfy the requirement boo No distributions at all found for boo Storing complete log in /Users/zappi/.pip/pip.log
  40. 40. pip uninstall $ pip uninstall Markdown Uninstalling Markdown: /Users/zappi/.virtualenvs/testenv/bin/markdown /Users/zappi/.virtualenvs/testenv/lib/python2.6/site-packages/ Markdown-2.0.3-py2.6.egg-info /Users/zappi/.virtualenvs/testenv/lib/python2.6/site-packages/ markdown Proceed (y/n)? y Successfully uninstalled Markdown
  41. 41. pip & PyPI Mirrors PEP 381: Mirroring infrastructure for PyPI $ pip install --use-mirrors Django oder $ export PIP_USE_MIRRORS=true
  42. 42. pip freeze $ pip freeze Django==1.2.1 amqplib==0.6.1 anyjson==0.2.4 billiard==0.3.1 carrot==0.10.5 celery==1.0.5 distribute==0.6.10 django-debug-toolbar==0.8.3 django-picklefield==0.1.6 importlib==1.0.2 python-dateutil==1.5 wsgiref==0.1.2 $ pip freeze > requirements.txt
  43. 43. pip search $ pip search markdown Markdoc - A lightweight Markdown-based wiki build tool. markdown2 - markdown2: A fast and complete Python implementaion of Markdown. Argot - argot text markup -- a markdown dialect Flask-Markdown - Small extension to make using markdown easy Markdown - Python implementation of Markdown. INSTALLED: 2.0.3 (latest) django-markdown2 - This is a simple app, which supplies a single template tag for markdown markup. tiddlywebplugins.markdown - Markdown rendering for TiddlyWeb discount - A Python interface for Discount, the C Markdown parser tiddlywebplugins.simplewiki - A simple markdown based wiki in TiddlyWeb django-markdown-deux - a Django app that provides template tags for using Markdown (using the python-markdown2 processor) pymarkdown_minisite - Parse a list of markdown files to a website with index. html2text - Turn HTML into equivalent Markdown-structured text. markdown2latex - Extension django-autolinks - App for storing links and automatic link extraction from markdown texts. collective.transform.multimarkdown - MultiMarkdown text transform for Plone
  44. 44. pip completion $ pip completion --bash >> ~/.profile $ pip completion --zsh >> ~/.zprofile
  45. 45. Links • http://pypi.python.org/pypi/distribute • http://guide.python-distribute.org/ • http://pip.openplans.org/ • http://pypi.python.org/pypi/virtualenv • http://pypi.python.org/pypi/virtualenvwrapper • http://pypi.python.org/pypi/modern-package- template
  46. 46. Lizenz Dieses Werk ist unter einem Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenzvertrag lizenziert. Um die Lizenz anzusehen, gehen Sie bitte zu http://creativecommons.org/licenses/by-sa/3.0/ oder schicken Sie einen Brief an Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×