Your SlideShare is downloading. ×
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply



Published on

by Christian Strappazzon

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. The hitchhickers guide to PIPand Virtualenv (wrapper)...Maybe...
  • 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. Index PIP virtual env r r appe l envwv irtua mabye...and e veryt hing :) wers ans
  • 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. 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. 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. So what? ea sy _i ns I P taP ll
  • 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. 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. 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. 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. Want to know more? Read the docs! ( Luke! :D ) PIP
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Not entirely unlike... virtualenv   virtualenvwrapper
  • 27. which python ?Latest stable2.4.6, 2.5.6, 2.6.8, 2.7.3Images comes from Wikipedia
  • 28. pythonbrew !pythonbrew is a program to automate thebuilding and installation of Python in theusers $HOME.
  • 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. 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. 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. 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. 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. 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. 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. Share and Enjoy! :P
  • 37. @cstrap
  • 38. Answers?Thanks for your patience! ;)