Virtualenv

WEBdeBS
The hitchhicker's guide to PIP
and Virtualenv (wrapper)...
Maybe...
Knowing where one's towel is




"Hey, you sass that hoopy Ford Prefect? There's a frood who really
knows where his towel is." (Sass: know, be aware of, meet, have sex
 with; hoopy: really together guy; frood: really amazingly together
                                guy.)
Index
   PIP                     virtual
                                  env

                      r
               r appe
        l envw
v irtua

              mabye...

and e
      veryt
            hing
                 :)

                    wers
                ans
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! )
What is PIP?
      - pip installs packages. Python packages. -



pip is a tool for installing and
managing Python packages, such as
those found in the Python Package
Index (PyPI).
 
It’s a replacement for easy_install.
But...   what is Easy Install?

Easy Install is a python module
(easy_install) bundled with
setuptools that lets you
automatically download, build, install,
and manage Python packages.
 
So what?
            ea
              sy
                   _i
                     ns
    I P                ta
P                        ll
Virtualenv
PIP installation
    Using package manager, the installer or from source

  (root)# apt-get install python-pip
# or
  (root)# curl http://python-distribute.org/distribute_setup.
py | python
  (root)# curl https://raw.github.
com/pypa/pip/master/contrib/get-pip.py | python
# or
  $ curl -O http://[...]/pip-1.0.tar.gz
  $ tar xvfz pip-x.y.tar.gz ; cd pip-1.0
# or
  $ git clone https://github.com/pypa/pip.git ; cd pip
  (root)# python setup.py install
PIP usage - base options
$ pip install SomePackage

   pip   install   /path/to/SomePackage.1.1.1.tar.gz
   pip   install   http://myrepo.it/SomePakage-1.4.0.zip
   pip   install   -e git+http://github.com/django/django.git#egg=django
   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
                                                           ...
PIP configuration
                        - quickest look -

*nix $HOME/.pip/pip.conf                           [global]
                                                   timeout = 60
windows %HOME%pippip.ini                         [freeze]
                                                   timeout = 10

$ export PIP_DEFAULT_TIMEOUT=10                    [install]
$ pip install django                               find-links =
                                                       http://mirror.com



 Env. variables
 override config file
                           Each command line options have a
                           PIP_<UPPER_NAME> environment variables



$ pip --default-timeout=60 install django
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                  http://d.pypi.python.org
                                               http://b.pypi.python.org




 You can create your own mirror, following the PEP 381 or using a tool
 such as pep381client
Want to know more?
           Read the docs!
            ( Luke! :D )




                      PIP
http://www.pip-installer.org/en/latest/index.html
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 - don't require installing stuff
    globally on the system.
PIP + virtualenv
●   it's not recommended install packages
    globally, but you can :)
●   pip works fine with virtualenv!
●   used in conjunction to isolate your
    installation


Well... step forward: setup and play with
           virtual environments!
What is virtualenv?
Is a tool to create isolated Python
environments.
 


Every virtualenv has pip installed in
it automatically (also easy_install)
under bin directory.
 


Does not require root access or
modify your system.
Installation

Using package manager, pip, the installer or using single file


  (root)# apt-get install python-virtualenv
# or
  (root)# pip install virtualenv
# or
  $ curl -O 
  https://raw.github.com/pypa/virtualenv/master/virtualenv.py
Basic Usage
                            $ virtualenv ENV


  This creates a folder ENV in the $PWD
  You'll find python packages on ENV/lib/pythonX.X/site-packages




                            Interesting options!



    $ virtualenv --no-site-packages --python=PYTHON_EXE ENV


Doesn't inherit global site-packages and use a different Python interpreter
Activate and Using ENV
$ cd ENV ; . bin/activate
(ENV) $ pip install django
Downloading/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
Extending virtualenv
# django-day.py
import virtualenv, textwrap
output = virtualenv.create_bootstrap_script(textwrap.
dedent())"""
def after_install(options, home_dir):
    subprocess.call([join(home_dir, 'bin', 'pip'),
       'install',
       'django'])
"""
f = open('django-bootstrap.py', 'w').write(output)



extend_parser(optparse_parser):
    # add or remove option          The script created is an
adjust_options(options, args):
    # change options or args
                                    extension to virtualenv
after_install(options, home_dir):   and inherit all its options!
    # after install run this
Virtualenv
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 ;)
Installation
           (root)# pip install virtualenvwrapper
           $ cd ~
           $ mkdir ~/.virtualenvs


Include environment vars needed into ~/.bashrc

           export    WORKON_HOME=$HOME/.virtualenvs
           source    /usr/local/bin/virtualenvwrapper.sh
           export    PIP_VIRTUALENV_BASE=$WORKON_HOME
           export    PIP_RESPECT_VIRTUALENV=true


A little tips: add to ~/.virtualenvs/postactivate

           export PYTHONPATH=$PYTHONPATH:$VIRTUAL_ENV
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
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
http://www.doughellmann.com/docs/virtualenvwrapper/command_ref.html
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 it's not so cool ;) ...
$ rmvirtualenv djangoday-rulez
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.txt



Under ~/.virtualenvs you'll find the hook scripts that running pre/post
create, activate environments.
                                                         postmkvirtualenv
Hooks are simply plain-text files with shell commands.   prermvirtualenv
You can customize them to change their behavior when an  postrmvirtualenv
                                                         postactivate
event occurs.                                            predeactivate
 
                                                         postdeactivate
See extending virtualenv-wrapper: http://bit.ly/IMP0vh
Not entirely unlike...




    virtualenv         virtualenvwrapper
                       http://bit.ly/141dCr
                  
http://bit.ly/jbFVCe
which python ?
Latest stable
2.4.6, 2.5.6,
 2.6.8, 2.7.3




Images comes from
    Wikipedia
Virtualenv
pythonbrew !
pythonbrew is a program to automate the
building and installation of Python in the
users $HOME.
Installation
Recommended way

   $ curl -kL http://xrl.us/pythonbrewinstall | 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 https://github.com/saghul/pythonz
(forked last week... Wait! I have a presentation to do! :D )
                  Long live pythonz!
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
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/python



Cool! And you can create isolated python environments
                 (it uses virtualenv) ...
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 it's not so cool ;) ...
  $ pythonbrew venv delete djangoday-proj
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


                     ...
Virtualenv
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/python
Python 2.6.7
(djangoDay) [djangoDay] $ deactivate
$ which python ; python -V
/usr/bin/python
Python 2.7.2
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 .bashrc
export WORKON_HOME=$HOME/.virtualenvs
export 
VIRTUALENVWRAPPER_PYTHON=$HOME/.pythonbrew/pythons/Python-2.7.3/bin/python
source $HOME/.pythonbrew/pythons/Python-2.7.3/bin/virtualenvwrapper.sh
export 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/python
Python 2.5.6
(djangoDay) [djangoDay] $ deactivate
$ which python ; python -V
/home/cstrap/.pythonbrew/pythons/Python-2.7.3/bin/python
Python 2.7.3
$ pythonbrew off; python -V
# Your current system version of Python
Share and Enjoy! :P
lab@strap.it




         @cstrap
Answers?




Thanks for your patience! ;)
1 of 42

Recommended

Intro to-venv-py3 by
Intro to-venv-py3Intro to-venv-py3
Intro to-venv-py3Dhineshsunder ganapathi
201 views11 slides
5 minute intro to virtualenv by
5 minute intro to virtualenv5 minute intro to virtualenv
5 minute intro to virtualenvamenasse
1.7K views15 slides
Pip + virtualenv by
Pip + virtualenvPip + virtualenv
Pip + virtualenvDaryl Yu
765 views29 slides
Virtualenv by
VirtualenvVirtualenv
VirtualenvJon Nials
1.3K views16 slides
Arbeiten mit distribute, pip und virtualenv by
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvMarkus Zapke-Gründemann
1.4K views47 slides
T3CON12 Flow and TYPO3 deployment with surf by
T3CON12 Flow and TYPO3 deployment with surfT3CON12 Flow and TYPO3 deployment with surf
T3CON12 Flow and TYPO3 deployment with surfTobias Liebig
2.9K views55 slides

More Related Content

What's hot

Vagrant and CentOS 7 by
Vagrant and CentOS 7Vagrant and CentOS 7
Vagrant and CentOS 7Julien Pivotto
15.4K views67 slides
Python environments by
Python environmentsPython environments
Python environmentsGlen Zangirolami
895 views36 slides
Puppet DSL: back to the basics by
Puppet DSL: back to the basicsPuppet DSL: back to the basics
Puppet DSL: back to the basicsJulien Pivotto
2.2K views30 slides
pip and virtualenv by
pip and virtualenvpip and virtualenv
pip and virtualenvamaneu
3.5K views17 slides
Scalable Deployment Architectures with TYPO3 Surf, Git and Jenkins by
Scalable Deployment Architectures with TYPO3 Surf, Git and JenkinsScalable Deployment Architectures with TYPO3 Surf, Git and Jenkins
Scalable Deployment Architectures with TYPO3 Surf, Git and Jenkinsmhelmich
8.7K views42 slides
Puppet without Root - PuppetConf 2013 by
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet
6.5K views42 slides

What's hot(20)

Puppet DSL: back to the basics by Julien Pivotto
Puppet DSL: back to the basicsPuppet DSL: back to the basics
Puppet DSL: back to the basics
Julien Pivotto2.2K views
pip and virtualenv by amaneu
pip and virtualenvpip and virtualenv
pip and virtualenv
amaneu3.5K views
Scalable Deployment Architectures with TYPO3 Surf, Git and Jenkins by mhelmich
Scalable Deployment Architectures with TYPO3 Surf, Git and JenkinsScalable Deployment Architectures with TYPO3 Surf, Git and Jenkins
Scalable Deployment Architectures with TYPO3 Surf, Git and Jenkins
mhelmich8.7K views
Puppet without Root - PuppetConf 2013 by Puppet
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013
Puppet6.5K views
TYPO3 CMS deployment with Jenkins CI by derdanne
TYPO3 CMS deployment with Jenkins CITYPO3 CMS deployment with Jenkins CI
TYPO3 CMS deployment with Jenkins CI
derdanne3.8K views
Docker to the Rescue of an Ops Team by Rachid Zarouali
Docker to the Rescue of an Ops TeamDocker to the Rescue of an Ops Team
Docker to the Rescue of an Ops Team
Rachid Zarouali189 views
uWSGI - Swiss army knife for your Python web apps by Tomislav Raseta
uWSGI - Swiss army knife for your Python web appsuWSGI - Swiss army knife for your Python web apps
uWSGI - Swiss army knife for your Python web apps
Tomislav Raseta3.1K views
DevOps Series: Extending vagrant with Puppet for configuration management by Felipe
DevOps Series: Extending vagrant with Puppet for configuration managementDevOps Series: Extending vagrant with Puppet for configuration management
DevOps Series: Extending vagrant with Puppet for configuration management
Felipe 722 views
Docker deploy by Eric Ahn
Docker deployDocker deploy
Docker deploy
Eric Ahn398 views
Introduction to IPython & Notebook by Areski Belaid
Introduction to IPython & NotebookIntroduction to IPython & Notebook
Introduction to IPython & Notebook
Areski Belaid4.9K views
Streamline your development environment with docker by Giacomo Bagnoli
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with docker
Giacomo Bagnoli1.8K views
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI by Max Tepkeev
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGIEuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI
Max Tepkeev2.3K views
How to deliver a Python project by mattjdavidson
How to deliver a Python projectHow to deliver a Python project
How to deliver a Python project
mattjdavidson997 views
6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ... by Sebastian Neubauer
6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ...6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ...
6 Years of Docker: The Good, the Bad and Python Packaging at PyCon.DE&PyData ...
Sebastian Neubauer453 views
Installing OpenCV 4 on Ubuntu 18.x by Nader Karimi
Installing OpenCV 4 on Ubuntu 18.xInstalling OpenCV 4 on Ubuntu 18.x
Installing OpenCV 4 on Ubuntu 18.x
Nader Karimi63 views

Viewers also liked

We Buy Cheese in a Cheese Shop by
We Buy Cheese in a Cheese ShopWe Buy Cheese in a Cheese Shop
We Buy Cheese in a Cheese ShopTzu-ping Chung
904 views100 slides
Python, Development Environment for Windows by
Python, Development Environment for WindowsPython, Development Environment for Windows
Python, Development Environment for WindowsKwangyoun Jung
1.7K views18 slides
Python Recipes for django girls seoul by
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoulJoeun Park
2.7K views54 slides
2 × 3 = 6 by
2 × 3 = 62 × 3 = 6
2 × 3 = 6Tzu-ping Chung
1.1K views39 slides
Rabbitmq & Postgresql by
Rabbitmq & PostgresqlRabbitmq & Postgresql
Rabbitmq & PostgresqlLucio Grenzi
9.4K views33 slides
The Django Book Chapter 9 - Django Workshop - Taipei.py by
The Django Book Chapter 9 - Django Workshop - Taipei.pyThe Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.pyTzu-ping Chung
881 views84 slides

Viewers also liked(20)

We Buy Cheese in a Cheese Shop by Tzu-ping Chung
We Buy Cheese in a Cheese ShopWe Buy Cheese in a Cheese Shop
We Buy Cheese in a Cheese Shop
Tzu-ping Chung904 views
Python, Development Environment for Windows by Kwangyoun Jung
Python, Development Environment for WindowsPython, Development Environment for Windows
Python, Development Environment for Windows
Kwangyoun Jung1.7K views
Python Recipes for django girls seoul by Joeun Park
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
Joeun Park2.7K views
Rabbitmq & Postgresql by Lucio Grenzi
Rabbitmq & PostgresqlRabbitmq & Postgresql
Rabbitmq & Postgresql
Lucio Grenzi9.4K views
The Django Book Chapter 9 - Django Workshop - Taipei.py by Tzu-ping Chung
The Django Book Chapter 9 - Django Workshop - Taipei.pyThe Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.py
Tzu-ping Chung881 views
Django e il Rap Elia Contini by WEBdeBS
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia Contini
WEBdeBS 522 views
Authentication & Authorization in ASPdotNet MVC by Mindfire Solutions
Authentication & Authorization in ASPdotNet MVCAuthentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVC
Mindfire Solutions1.7K views
NoSql Day - Apertura by WEBdeBS
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - Apertura
WEBdeBS 624 views
Django mongodb -djangoday_ by WEBdeBS
Django mongodb -djangoday_Django mongodb -djangoday_
Django mongodb -djangoday_
WEBdeBS 762 views
2016 py con2016_lightingtalk_php to python by Jiho Lee
2016 py con2016_lightingtalk_php to python2016 py con2016_lightingtalk_php to python
2016 py con2016_lightingtalk_php to python
Jiho Lee964 views
NoSql Day - Chiusura by WEBdeBS
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - Chiusura
WEBdeBS 604 views
Super Advanced Python –act1 by Ke Wei Louis
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
Ke Wei Louis1.5K views
The Django Book, Chapter 16: django.contrib by Tzu-ping Chung
The Django Book, Chapter 16: django.contribThe Django Book, Chapter 16: django.contrib
The Django Book, Chapter 16: django.contrib
Tzu-ping Chung1.2K views

Similar to Virtualenv

Django district pip, virtualenv, virtualenv wrapper & more by
Django district  pip, virtualenv, virtualenv wrapper & moreDjango district  pip, virtualenv, virtualenv wrapper & more
Django district pip, virtualenv, virtualenv wrapper & moreJacqueline Kazil
1.6K views23 slides
Pipfile, pipenv, pip… what?! by
Pipfile, pipenv, pip… what?!Pipfile, pipenv, pip… what?!
Pipfile, pipenv, pip… what?!Ivan Chernoff
492 views67 slides
Python packaging and dependency resolution by
Python packaging and dependency resolutionPython packaging and dependency resolution
Python packaging and dependency resolutionTatiana Al-Chueyr
1.3K views50 slides
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017 by
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017Codemotion
305 views36 slides
Arbeiten mit distribute, pip und virtualenv by
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvMarkus Zapke-Gründemann
777 views45 slides
Python+gradle by
Python+gradlePython+gradle
Python+gradleStephen Holsapple
7.1K views57 slides

Similar to Virtualenv(20)

Django district pip, virtualenv, virtualenv wrapper & more by Jacqueline Kazil
Django district  pip, virtualenv, virtualenv wrapper & moreDjango district  pip, virtualenv, virtualenv wrapper & more
Django district pip, virtualenv, virtualenv wrapper & more
Jacqueline Kazil1.6K views
Pipfile, pipenv, pip… what?! by Ivan Chernoff
Pipfile, pipenv, pip… what?!Pipfile, pipenv, pip… what?!
Pipfile, pipenv, pip… what?!
Ivan Chernoff492 views
Python packaging and dependency resolution by Tatiana Al-Chueyr
Python packaging and dependency resolutionPython packaging and dependency resolution
Python packaging and dependency resolution
Tatiana Al-Chueyr1.3K views
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017 by Codemotion
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017
Codemotion305 views
How I hack on puppet modules by Kris Buytaert
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modules
Kris Buytaert8.7K views
Docker for data science by Calvin Giles
Docker for data scienceDocker for data science
Docker for data science
Calvin Giles7.1K views
First python project by Neetu Jain
First python projectFirst python project
First python project
Neetu Jain2.3K views
Ruby and Rails Packaging to Production by Fabio Kung
Ruby and Rails Packaging to ProductionRuby and Rails Packaging to Production
Ruby and Rails Packaging to Production
Fabio Kung9.5K views
Jenkins and Docker for native Linux packages by Daniel Paulus
Jenkins and Docker for native Linux packagesJenkins and Docker for native Linux packages
Jenkins and Docker for native Linux packages
Daniel Paulus343 views
Django dev-env-my-way by Robert Lujo
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
Robert Lujo941 views
Django & Buildout (en) by zerok
Django & Buildout (en)Django & Buildout (en)
Django & Buildout (en)
zerok11.5K views
Python setup by Ryo Miyake
Python setupPython setup
Python setup
Ryo Miyake1.5K views
PyCon 2013 : Scripting to PyPi to GitHub and More by Matt Harrison
PyCon 2013 : Scripting to PyPi to GitHub and MorePyCon 2013 : Scripting to PyPi to GitHub and More
PyCon 2013 : Scripting to PyPi to GitHub and More
Matt Harrison5.7K views
Dependencies Managers in C/C++. Using stdcpp 2014 by biicode
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
biicode4.4K views
Docker to the Rescue of an Ops Team by Docker, Inc.
Docker to the Rescue of an Ops TeamDocker to the Rescue of an Ops Team
Docker to the Rescue of an Ops Team
Docker, Inc.556 views

More from WEBdeBS

Legal Pirlo by
Legal PirloLegal Pirlo
Legal PirloWEBdeBS
1.1K views27 slides
Nodejsconf 2012 by
Nodejsconf 2012Nodejsconf 2012
Nodejsconf 2012WEBdeBS
1.3K views19 slides
Mockup, wireframe e visual: una breve introduzione by
Mockup, wireframe e visual: una breve introduzioneMockup, wireframe e visual: una breve introduzione
Mockup, wireframe e visual: una breve introduzioneWEBdeBS
4K views52 slides
Djangoday lt 20120420 by
Djangoday lt 20120420Djangoday lt 20120420
Djangoday lt 20120420WEBdeBS
1.6K views13 slides
Unbit djangoday 20120419 by
Unbit djangoday 20120419Unbit djangoday 20120419
Unbit djangoday 20120419WEBdeBS
2.4K views31 slides
Geodjango by
GeodjangoGeodjango
GeodjangoWEBdeBS
4.7K views41 slides

More from WEBdeBS (10)

Legal Pirlo by WEBdeBS
Legal PirloLegal Pirlo
Legal Pirlo
WEBdeBS 1.1K views
Nodejsconf 2012 by WEBdeBS
Nodejsconf 2012Nodejsconf 2012
Nodejsconf 2012
WEBdeBS 1.3K views
Mockup, wireframe e visual: una breve introduzione by WEBdeBS
Mockup, wireframe e visual: una breve introduzioneMockup, wireframe e visual: una breve introduzione
Mockup, wireframe e visual: una breve introduzione
WEBdeBS 4K views
Djangoday lt 20120420 by WEBdeBS
Djangoday lt 20120420Djangoday lt 20120420
Djangoday lt 20120420
WEBdeBS 1.6K views
Unbit djangoday 20120419 by WEBdeBS
Unbit djangoday 20120419Unbit djangoday 20120419
Unbit djangoday 20120419
WEBdeBS 2.4K views
Geodjango by WEBdeBS
GeodjangoGeodjango
Geodjango
WEBdeBS 4.7K views
Fagungis by WEBdeBS
FagungisFagungis
Fagungis
WEBdeBS 342 views
Iga workflow by WEBdeBS
Iga workflowIga workflow
Iga workflow
WEBdeBS 620 views
PepperTweet - Project presentation Startup Weekend Brescia by WEBdeBS
PepperTweet - Project presentation Startup Weekend BresciaPepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend Brescia
WEBdeBS 710 views
Peppertweet - Presentazione Startup Weekend Brescia by WEBdeBS
Peppertweet - Presentazione Startup Weekend BresciaPeppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend Brescia
WEBdeBS 353 views

Recently uploaded

Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITShapeBlue
138 views8 slides
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
113 views18 slides
MVP and prioritization.pdf by
MVP and prioritization.pdfMVP and prioritization.pdf
MVP and prioritization.pdfrahuldharwal141
39 views8 slides
Data Integrity for Banking and Financial Services by
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial ServicesPrecisely
76 views26 slides
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ by
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericConfidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericShapeBlue
58 views9 slides
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...ShapeBlue
120 views62 slides

Recently uploaded(20)

Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue138 views
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue113 views
Data Integrity for Banking and Financial Services by Precisely
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial Services
Precisely76 views
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ by ShapeBlue
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericConfidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
ShapeBlue58 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue120 views
Digital Personal Data Protection (DPDP) Practical Approach For CISOs by Priyanka Aash
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOs
Priyanka Aash103 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker50 views
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ... by ShapeBlue
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
ShapeBlue121 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue93 views
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti... by ShapeBlue
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
ShapeBlue69 views
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
ShapeBlue75 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc130 views
The Power of Heat Decarbonisation Plans in the Built Environment by IES VE
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built Environment
IES VE67 views
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by ShapeBlue
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
ShapeBlue52 views
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty54 views
State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue218 views

Virtualenv

  • 1. The hitchhicker's guide to PIP and Virtualenv (wrapper)... Maybe...
  • 2. Knowing where one's towel is "Hey, you sass that hoopy Ford Prefect? There's a frood who really knows 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 envw v 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 and managing Python packages, such as those found in the Python Package Index (PyPI).   It’s a replacement for easy_install.
  • 6. But... what is Easy Install? Easy Install is a python module (easy_install) bundled with setuptools that lets you automatically download, build, install, and manage Python packages.  
  • 7. So what? ea sy _i ns I P ta P ll
  • 9. PIP installation Using package manager, the installer or from source (root)# apt-get install python-pip # or (root)# curl http://python-distribute.org/distribute_setup. py | python (root)# curl https://raw.github. com/pypa/pip/master/contrib/get-pip.py | python # or $ curl -O http://[...]/pip-1.0.tar.gz $ tar xvfz pip-x.y.tar.gz ; cd pip-1.0 # or $ git clone https://github.com/pypa/pip.git ; cd pip (root)# python setup.py install
  • 10. PIP usage - base options $ pip install SomePackage pip install /path/to/SomePackage.1.1.1.tar.gz pip install http://myrepo.it/SomePakage-1.4.0.zip pip install -e git+http://github.com/django/django.git#egg=django 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 ...
  • 11. PIP configuration - quickest look - *nix $HOME/.pip/pip.conf [global] timeout = 60 windows %HOME%pippip.ini [freeze] timeout = 10 $ export PIP_DEFAULT_TIMEOUT=10 [install] $ pip install django find-links = http://mirror.com Env. variables override config file Each command line options have a PIP_<UPPER_NAME> environment variables $ pip --default-timeout=60 install django
  • 12. 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 http://d.pypi.python.org http://b.pypi.python.org You can create your own mirror, following the PEP 381 or using a tool such as pep381client
  • 13. Want to know more? Read the docs! ( Luke! :D ) PIP http://www.pip-installer.org/en/latest/index.html
  • 14. 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 - don't require installing stuff globally on the system.
  • 15. PIP + virtualenv ● it's not recommended install packages globally, but you can :) ● pip works fine with virtualenv! ● used in conjunction to isolate your installation Well... step forward: setup and play with virtual environments!
  • 16. What is virtualenv? Is a tool to create isolated Python environments.   Every virtualenv has pip installed in it automatically (also easy_install) under bin directory.   Does not require root access or modify your system.
  • 17. Installation Using package manager, pip, the installer or using single file (root)# apt-get install python-virtualenv # or (root)# pip install virtualenv # or $ curl -O https://raw.github.com/pypa/virtualenv/master/virtualenv.py
  • 18. Basic Usage $ virtualenv ENV This creates a folder ENV in the $PWD You'll find python packages on ENV/lib/pythonX.X/site-packages Interesting options! $ virtualenv --no-site-packages --python=PYTHON_EXE ENV Doesn't inherit global site-packages and use a different Python interpreter
  • 19. Activate and Using ENV $ cd ENV ; . bin/activate (ENV) $ pip install django Downloading/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
  • 20. Extending virtualenv # django-day.py import virtualenv, textwrap output = virtualenv.create_bootstrap_script(textwrap. dedent())""" def after_install(options, home_dir): subprocess.call([join(home_dir, 'bin', 'pip'), 'install', 'django']) """ f = open('django-bootstrap.py', 'w').write(output) extend_parser(optparse_parser): # add or remove option The script created is an adjust_options(options, args): # change options or args extension to virtualenv after_install(options, home_dir): and inherit all its options! # after install run this
  • 22. 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 ;)
  • 23. Installation (root)# pip install virtualenvwrapper $ cd ~ $ mkdir ~/.virtualenvs Include environment vars needed into ~/.bashrc export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh export PIP_VIRTUALENV_BASE=$WORKON_HOME export PIP_RESPECT_VIRTUALENV=true A little tips: add to ~/.virtualenvs/postactivate export PYTHONPATH=$PYTHONPATH:$VIRTUAL_ENV
  • 24. 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
  • 25. 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 http://www.doughellmann.com/docs/virtualenvwrapper/command_ref.html
  • 26. 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 it's not so cool ;) ... $ rmvirtualenv djangoday-rulez
  • 27. 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.txt Under ~/.virtualenvs you'll find the hook scripts that running pre/post create, activate environments. postmkvirtualenv Hooks are simply plain-text files with shell commands. prermvirtualenv You can customize them to change their behavior when an postrmvirtualenv postactivate event occurs. predeactivate     postdeactivate See extending virtualenv-wrapper: http://bit.ly/IMP0vh
  • 28. Not entirely unlike... virtualenv   virtualenvwrapper http://bit.ly/141dCr   http://bit.ly/jbFVCe
  • 29. which python ? Latest stable 2.4.6, 2.5.6, 2.6.8, 2.7.3 Images comes from Wikipedia
  • 31. pythonbrew ! pythonbrew is a program to automate the building and installation of Python in the users $HOME.
  • 32. Installation Recommended way $ curl -kL http://xrl.us/pythonbrewinstall | 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 https://github.com/saghul/pythonz (forked last week... Wait! I have a presentation to do! :D ) Long live pythonz!
  • 33. 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
  • 34. 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/python Cool! And you can create isolated python environments (it uses virtualenv) ...
  • 35. 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 it's not so cool ;) ... $ pythonbrew venv delete djangoday-proj
  • 36. 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 ...
  • 38. 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/python Python 2.6.7 (djangoDay) [djangoDay] $ deactivate $ which python ; python -V /usr/bin/python Python 2.7.2
  • 39. 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 .bashrc export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=$HOME/.pythonbrew/pythons/Python-2.7.3/bin/python source $HOME/.pythonbrew/pythons/Python-2.7.3/bin/virtualenvwrapper.sh export 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/python Python 2.5.6 (djangoDay) [djangoDay] $ deactivate $ which python ; python -V /home/cstrap/.pythonbrew/pythons/Python-2.7.3/bin/python Python 2.7.3 $ pythonbrew off; python -V # Your current system version of Python
  • 41. lab@strap.it @cstrap
  • 42. Answers? Thanks for your patience! ;)