Published on

by Christian Strappazzon

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide


  1. 1. The hitchhickers guide to PIPand Virtualenv (wrapper)...Maybe...
  2. 2. Knowing where ones towel is"Hey, you sass that hoopy Ford Prefect? Theres a frood who reallyknows where his towel is." (Sass: know, be aware of, meet, have sex with; hoopy: really together guy; frood: really amazingly together guy.)
  3. 3. Index PIP virtual env r r appe l envwv irtua mabye...and e veryt hing :) wers ans
  4. 4. Prerequisites It (maybe) works also in other *nix and with a little effort on● Python :) Windows ;)● linux ( unfortunately or fortunately :P )● comfort with shell● patience required● internet connection ( not now, but we work on the web, in the coils of the Python! )
  5. 5. What is PIP? - pip installs packages. Python packages. -pip is a tool for installing andmanaging Python packages, such asthose found in the Python PackageIndex (PyPI). It’s a replacement for easy_install.
  6. 6. But... what is Easy Install?Easy Install is a python module(easy_install) bundled withsetuptools that lets youautomatically download, build, install,and manage Python packages. 
  7. 7. So what? ea sy _i ns I P taP ll
  8. 8. PIP installation Using package manager, the installer or from source (root)# apt-get install python-pip# or (root)# curl | python (root)# curl | python# or $ curl -O http://[...]/pip-1.0.tar.gz $ tar xvfz pip-x.y.tar.gz ; cd pip-1.0# or $ git clone ; cd pip (root)# python install
  9. 9. PIP usage - base options$ pip install SomePackage pip install /path/to/SomePackage.1.1.1.tar.gz pip install pip install -e git+ pip install -e path/to/SomePackage pip install django==1.1.1 ==, >=, >, <, <=$ pip install --upgrade package-name$ pip uninstall package-name another way for querying installed packages given from$ pip search "query" yolk$ pip freeze > requirements.txt Django==1.1.2 ipdb==0.2$ pip install -r requirements.txt ipython==0.10.1 ...
  10. 10. PIP configuration - quickest look -*nix $HOME/.pip/pip.conf [global] timeout = 60windows %HOME%pippip.ini [freeze] timeout = 10$ export PIP_DEFAULT_TIMEOUT=10 [install]$ pip install django find-links = Env. variables override config file Each command line options have a PIP_<UPPER_NAME> environment variables$ pip --default-timeout=60 install django
  11. 11. PyPI - the Python Pakage Index - PyPI is a repository of software for Python and currently count 20481 packages. The PyPI repository provides alternative locations that store the packages.   [install] use-mirrors = true$ pip --use-mirrors ... mirrors =$ export PIP_USE_MIRRORS=true You can create your own mirror, following the PEP 381 or using a tool such as pep381client
  12. 12. Want to know more? Read the docs! ( Luke! :D ) PIP
  13. 13. WHY virtual environments?● Isolation - Python packages and even version live in their own planet :)● Permissions - No sudoers, the environment is mine!!!● Organization - each project can maintain its own requirements file of Python packages.● No-Globalization - dont require installing stuff globally on the system.
  14. 14. PIP + virtualenv● its not recommended install packages globally, but you can :)● pip works fine with virtualenv!● used in conjunction to isolate your installationWell... step forward: setup and play with virtual environments!
  15. 15. What is virtualenv?Is a tool to create isolated Pythonenvironments. Every virtualenv has pip installed init automatically (also easy_install)under bin directory. Does not require root access ormodify your system.
  16. 16. InstallationUsing package manager, pip, the installer or using single file (root)# apt-get install python-virtualenv# or (root)# pip install virtualenv# or $ curl -O
  17. 17. Basic Usage $ virtualenv ENV This creates a folder ENV in the $PWD Youll find python packages on ENV/lib/pythonX.X/site-packages Interesting options! $ virtualenv --no-site-packages --python=PYTHON_EXE ENVDoesnt inherit global site-packages and use a different Python interpreter
  18. 18. Activate and Using ENV$ cd ENV ; . bin/activate(ENV) $ pip install djangoDownloading/unpacking django Downloading Django-1.4.tar.gz (7.6Mb): 5.2Mb downloaded... Also virtualenv has a config file and its looks like pip.conf
  19. 19. Extending virtualenv# django-day.pyimport virtualenv, textwrapoutput = virtualenv.create_bootstrap_script(textwrap.dedent())"""def after_install(options, home_dir):[join(home_dir, bin, pip), install, django])"""f = open(, w).write(output)extend_parser(optparse_parser): # add or remove option The script created is anadjust_options(options, args): # change options or args extension to virtualenvafter_install(options, home_dir): and inherit all its options! # after install run this
  20. 20. virtualenvwrapper by Doug Hellmann is a set of extensions to Ian Bicking’s virtualenv tool for creating isolated Python development environments.Features, taken verbatim from website:● Organizes all of your virtual environments in one place. ● Wrappers for managing your virtual environments (create, delete, copy). ● Use a single command to switch between environments. ● Tab completion for commands that take a virtual environment as argument. ● User-configurable hooks for all operations. ● Plugin system for more creating sharable extensions. Your homework ;)
  21. 21. Installation (root)# pip install virtualenvwrapper $ cd ~ $ mkdir ~/.virtualenvsInclude environment vars needed into ~/.bashrc export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/ export PIP_VIRTUALENV_BASE=$WORKON_HOME export PIP_RESPECT_VIRTUALENV=trueA little tips: add to ~/.virtualenvs/postactivate export PYTHONPATH=$PYTHONPATH:$VIRTUAL_ENV
  22. 22. Basic Commands A brief introducion to manage virtual enviroment$ mkvirtualenv --no-site-packages --python=PYTHON_EXE ENV # same as virtualenv!$ workon ENV (ENV) $ cdvirtualenv# set virtualenv environment # go to home environment(ENV) $ (ENV) $ deactivate # deactivate current environment $ rmvirtualenv ENV # remove selected environment
  23. 23. More Commands :) (ENV) $ lssitepackages # list packages on current environment (ENV) $ cdsitepackages # go to site-packages directory (ENV) $ add2virtualenv directory... # adds the specified directories to the Python path (ENV) $ toggleglobalsitepackages # enable/disable global site-packages Much more commands & options at
  24. 24. Simple Sample :P$ mkvirtualenv --no-site-packages djangoday-rulez(djangoday-rulez) $ deactivate$ workon djangoday-rulez(djangoday-rulez) $ cdvirtualenv(djangoday-rulez) $ pip install django... do some cool stuff ...(djangoday-rulez) $ lssitepackages(djangoday-rulez) $ deactivate... do other stuff or switch project... --- ...... if its not so cool ;) ...$ rmvirtualenv djangoday-rulez
  25. 25. Tips & Hooks virtual environment with "requirements.txt" file $ mkvirtualenv --no-site-packages --python=PYTHON_EXE -r django-requirements.txt $ mkvirtualenv --no-site-packages -r other-requirements.txtUnder ~/.virtualenvs youll find the hook scripts that running pre/postcreate, activate environments. postmkvirtualenvHooks are simply plain-text files with shell commands. prermvirtualenvYou can customize them to change their behavior when an postrmvirtualenv postactivateevent occurs. predeactivate   postdeactivateSee extending virtualenv-wrapper:
  26. 26. Not entirely unlike... virtualenv   virtualenvwrapper
  27. 27. which python ?Latest stable2.4.6, 2.5.6, 2.6.8, 2.7.3Images comes from Wikipedia
  28. 28. pythonbrew !pythonbrew is a program to automate thebuilding and installation of Python in theusers $HOME.
  29. 29. InstallationRecommended way $ curl -kL | bash Add the following line into ~/.bashrc[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc Last News!!!The original project seems to be unmantained, but there is a fork last week... Wait! I have a presentation to do! :D ) Long live pythonz!
  30. 30. Usage Crash course!$ pythonbrew install VERSION $ pythonbrew off # install python VERSION # turn off pythonbrew$ pythonbrew list -k $ pythonbrew use VERSION # list available pythons # use specified python$ pythonbrew list $ pythonbrew uninstall VERSION # list installed pythons # uninstall python VERSION $ pythonbrew switch VERSION # permanently use specified python
  31. 31. which python$ pythonbrew use 2.6.5$ which python/home/cstrap/.pythonbrew/pythons/Python-2.5.6/bin/python$ pythonbrew off$ which python/usr/bin/pythonCool! And you can create isolated python environments (it uses virtualenv) ...
  32. 32. Create and use pythonbrew Always use the --force, Luke! $ pythonbrew install --force 2.5.6 ... wait... This could take a while... $ pythonbrew use 2.5.6 $ pythonbrew venv init $ pythonbrew venv create djangoday-proj $ pythonbrew venv list # list all environments $ pythonbrew venv use djangoday-proj (djangoday-proj) $ pip install django ... do some cool stuff ... ... if its not so cool ;) ... $ pythonbrew venv delete djangoday-proj
  33. 33. Mostly Harmles...● virtualenv & virtualenvwrapper allow you to create and manage environments using the system default Python interpreter● pythonbrew allow you to install different Python interpreter, create and manage virtual environments ...
  34. 34. Basic Combo$ pythonbrew install --force 2.6.7 ... wait...$ mkvirtualenv --no-site-packages -p $HOME/.pythonbrew/pythons/Python-2.6.7/bin/python djangoDay ... wait...(djangoDay) $ cdvirtualenv(djangoDay) [djangoDay] $ pip install django... wait...(djangoDay) $ which python ; python -V/home/cstrap/.virtualenvs/djangoDay/bin/pythonPython 2.6.7(djangoDay) [djangoDay] $ deactivate$ which python ; python -V/usr/bin/pythonPython 2.7.2
  35. 35. Super Combo$ pythonbrew install --force 2.7.3 ... wait...$ pythonbrew install --force 2.5.6 ... wait...$ pythonbrew use 2.7.3$ pip install virtualenv && pip install virtualenvwrapper# configure .bashrcexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=$HOME/.pythonbrew/pythons/Python-2.7.3/bin/pythonsource $HOME/.pythonbrew/pythons/Python-2.7.3/bin/virtualenvwrapper.shexport PIP_VIRTUALENV_BASE=$WORKON_HOME$ mkdir ~/.virtualenvs$ mkvirtualenv --no-site-packages -p $HOME/.pythonbrew/pythons/Python-2.5.6/bin/python djangoDay(djangoDay) $ which python ; python -V/home/cstrap/.virtualenvs/djangoDay/bin/pythonPython 2.5.6(djangoDay) [djangoDay] $ deactivate$ which python ; python -V/home/cstrap/.pythonbrew/pythons/Python-2.7.3/bin/pythonPython 2.7.3$ pythonbrew off; python -V# Your current system version of Python
  36. 36. Share and Enjoy! :P
  37. 37. @cstrap
  38. 38. Answers?Thanks for your patience! ;)