Arbeiten mit distribute, pip und virtualenv

1,218 views

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,218
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
7
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 Leipzig Python User Group - 10.8.2010
  2. 2. Überblick • Über mich • distribute • pip • modern-package-template • virtualenv • virtualenvwrapper
  3. 3. 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
  4. 4. distribute
  5. 5. 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é
  6. 6. Wichtige Features von distribute • Herunterladen und Installieren von benötigten Paketen • Automatisches Einschließen von Paketen und weiteren Dateien • „Package Namespaces“ • PyPI Upload • „Development Mode“ (setup.py develop)
  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. pip
  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. 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...
  11. 11. 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
  12. 12. 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...
  13. 13. 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...
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. pip completion $ pip completion --bash >> ~/.profile $ pip completion --zsh >> ~/.zprofile
  19. 19. Design done by Idan Gazit (http://pixane.com) - License: cc-by-3.0
  20. 20. modern-package-template
  21. 21. modern-package-template • PasteScript Template • distribute • buildout • Autor: Sridhar Ratnakumar $ pip install modern-package-template
  22. 22. 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
  23. 23. modern-package-template Verzeichnisstruktur .gitignore .hgignore HACKING.txt MANIFEST.in NEWS.txt README.rst buildout bootstrap.py distribute buildout.cfg setup.py src/ testpackage/ testpackage.egg-info/
  24. 24. modern-package-template setup.py Teil 1 from setuptools import setup, find_packages import sys, os here = os.path.abspath(os.path.dirname(__file__)) README = open(os.path.join(here, 'README.rst')).read() NEWS = open(os.path.join(here, 'NEWS.txt')).read() version = '0.1' install_requires = [ # List your project dependencies here. # For more details, see: # http://packages.python.org/distribute/setuptools.html#declaring-dependencies ]
  25. 25. modern-package-template setup.py Teil 2 setup(name='testpackage', version=version, description="A test package.", long_description=README + 'nn' + NEWS, classifiers=[ # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers ], keywords='test package', author='Markus Zapke-Grxc3xbcndemann', author_email='info@keimlink.de', url='http://www.keimlink.de/', license='BSD', packages=find_packages('src'), package_dir = {'': 'src'},include_package_data=True, zip_safe=False, install_requires=install_requires, entry_points={ 'console_scripts': ['testpackage=testpackage:main'] } )
  26. 26. virtualenv
  27. 27. virtualenv • Isolierte Python Umgebungen • Unterstützung für distribute • Kann mit WSGI Containern benutzt werden • Autor: Ian Bicking $ pip install virtualenv
  28. 28. Isolierte Python Umgebungen • Python Version wählbar (Symlink) • Eigenes bin Verzeichnis • Eigenes site-packages Verzeichnis
  29. 29. 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.
  30. 30. virtualenv aktivieren und deaktivieren zappi ~/$ cd testenv zappi ~/testenv$ . bin/activate (testenv)zappi ~/testenv$ deactivate zappi ~/testenv$
  31. 31. virtualenvwrapper
  32. 32. virtualenvwrapper • Erweiterung für virtualenv • Erleichtern das Erstellen, Löschen und Management • Autor: Doug Hellmann $ pip install virtualenvwrapper $ mkdir ~/.virtualenvs $ export WORKON_HOME=$HOME/.virtualenvs $ source /usr/local/bin/virtualenvwrapper.sh
  33. 33. 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 (testenv)zappi ~$
  34. 34. 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 (testenv)zappi ~$
  35. 35. cdvirtualenv (testenv)zappi ~$ cdvirtualenv (testenv)zappi ~/.virtualenvs/testenv$
  36. 36. 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
  37. 37. 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
  38. 38. 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
  39. 39. deactivate (testenv)zappi ~$ deactivate zappi ~$
  40. 40. workon zappi ~$ workon testenv (testenv)zappi ~$
  41. 41. 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
  42. 42. Hooks (testenv)zappi ~$ cdvirtualenv (testenv)zappi ~/.virtualenvs/testenv$ ls -l bin/*activate -rw-r--r-- 1 zappi zappi 2080 Aug 10 20:07 bin/activate -rwxrwxr-x 1 zappi zappi 68 Aug 10 20:07 bin/postactivate -rwxrwxr-x 1 zappi zappi 70 Aug 10 20:07 bin/postdeactivate -rwxrwxr-x 1 zappi zappi 69 Aug 10 20:07 bin/preactivate -rwxrwxr-x 1 zappi zappi 71 Aug 10 20:07 bin/predeactivate (testenv)zappi ~/.virtualenvs/testenv$ cd .. (testenv)zappi ~/.virtualenvs$ ls -l *virtualenv -rwxr-xr-x 1 zappi zappi 67 Jan 23 2010 postmkvirtualenv -rwxr-xr-x 1 zappi zappi 61 Jan 23 2010 postrmvirtualenv -rwxr-xr-x 1 zappi zappi 92 Jan 23 2010 premkvirtualenv -rwxr-xr-x 1 zappi zappi 62 Jan 23 2010 prermvirtualenv
  43. 43. Links • http://pypi.python.org/pypi/distribute • http://guide.python-distribute.org/ • http://pypi.python.org/pypi/modern-package- template • http://pip.openplans.org/ • http://pypi.python.org/pypi/virtualenv • http://pypi.python.org/pypi/virtualenvwrapper
  44. 44. 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.

×