Python:virtualenvs

De Les Tutoriaux du WebMestre
Aller à : navigation, rechercher

Prérequis

  • Ubuntu installé (dans mon cas une GnomeUbuntu 15.10)
    • avec votre Ubuntu 2 versions de python sont présentes ....
jpmena@jpmena-P34:~$ cat /etc/issue
Ubuntu 15.10 \n \l

jpmena@jpmena-P34:~$ whereis python
python: /usr/bin/python3.4m /usr/bin/python3.4 /usr/bin/python3.4m-config /usr/bin/python /usr/bin/python2.7 
/usr/bin/python3.4-config /usr/lib/python3.4 /usr/lib/python3.5 /usr/lib/python2.7 /etc/python3.4 
/etc/python /etc/python2.7 /usr/local/lib/python3.4 /usr/local/lib/python2.7 /usr/include/python3.4m 
/usr/include/python3.4 /usr/include/python3.5m /usr/share/python /usr/share/man/man1/python.1.gz
  • On voit que par défaut et Python 2.7 et Python 3.4 sont installés
  • Ils nous serviront de base ppour nos environnemments virtuels ....

Intallation des outils d'environnement virtuel

  • virtualenv et virtualenvwrapper s'installent par défaut via pip (sous Python 2.7) et pip3 (sous Python 3.4)

Installation de pip

Installation de pip pour python2.7

  • une seule commande suffit (je la passe en **root** comme ici ou via sudo):
root@jpmena-HP:~# apt-get install python-pip
Lecture des listes de paquets... Fait
Construction de l arbre des dépendances       
Lecture des informations d état... Fait
Les paquets supplémentaires suivants seront installés : 
  python-colorama python-distlib python-ndg-httpsclient python-requests python-setuptools python-urllib3 python-wheel
Paquets recommandés :
  python-dev-all
Les NOUVEAUX paquets suivants seront installés :
  python-colorama python-distlib python-ndg-httpsclient python-pip python-requests python-setuptools python-urllib3 python-wheel
0 mis à jour, 8 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 738 ko dans les archives.
Après cette opération, 2 957 ko d espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] #je tape O
………………………………………………………………………………

Installation de pip3 pour python3.4

  • une seule commande suffit (je la passe en **root** comme ici ou via sudo):
root@jpmena-HP:~# apt-get install python3-pip
Lecture des listes de paquets... Fait
Construction de l arbre des dépendances       
Lecture des informations d état... Fait
Les paquets supplémentaires suivants seront installés : 
  libpython3-dev libpython3.4-dev python3-colorama python3-dev python3-distlib python3-setuptools python3-wheel python3.4-dev
Les NOUVEAUX paquets suivants seront installés :
  libpython3-dev libpython3.4-dev python3-colorama python3-dev python3-distlib python3-pip python3-setuptools python3-wheel python3.4-dev
0 mis à jour, 9 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 23,6 Mo dans les archives.
Après cette opération, 39,0 Mo d espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] #je tape O
…………………………………………………………………………….

Installation de virtualenv

  • Cette installation est indépendante de la version de Python
  • je la réalise donc via pip (et donc python 2.7) avec l'utilisateur root (ou via la commande sudo)
    • car je souhaite pouvoir en disposer quelque soit l'utilisateur
root@jpmena-P34:~# pip install virtualenv
Downloading/unpacking virtualenv
  Downloading virtualenv-13.1.2-py2.py3-none-any.whl (1.7MB): 1.7MB downloaded
Installing collected packages: virtualenv
Successfully installed virtualenv
Cleaning up...

Installation de virtualenvwrapper

  • Cette installation est indépendante de la version de Python
  • je la réalise donc via pip (et donc python 2.7) avec l'utilisateur root (ou via la commande sudo)
    • car je souhaite pouvoir en disposer quelque soit l'utilisateur
root@jpmena-P34:~# pip install virtualenvwrapper
Downloading/unpacking virtualenvwrapper
  Downloading virtualenvwrapper-4.7.1-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): virtualenv in /usr/local/lib/python2.7/dist-packages (from virtualenvwrapper)
Downloading/unpacking virtualenv-clone (from virtualenvwrapper)
  Downloading virtualenv-clone-0.2.6.tar.gz
  Running setup.py (path:/tmp/pip-build-JDzls1/virtualenv-clone/setup.py) egg_info for package virtualenv-clone
    
Downloading/unpacking stevedore (from virtualenvwrapper)
  Downloading stevedore-1.10.0-py2.py3-none-any.whl
Downloading/unpacking pbr>=1.6 (from stevedore->virtualenvwrapper)
  Downloading pbr-1.8.1-py2.py3-none-any.whl (89kB): 89kB downloaded
Requirement already satisfied (use --upgrade to upgrade): argparse in /usr/lib/python2.7 (from stevedore->virtualenvwrapper)
Requirement already satisfied (use --upgrade to upgrade): six>=1.9.0 in /usr/lib/python2.7/dist-packages (from stevedore->virtualenvwrapper)
Installing collected packages: virtualenvwrapper, virtualenv-clone, stevedore, pbr
  Running setup.py install for virtualenv-clone
    
    Installing virtualenv-clone script to /usr/local/bin
Successfully installed virtualenvwrapper virtualenv-clone stevedore pbr
Cleaning up...

Adaptation de bashrc et tests

Adaptation du .bashrc

  • Le shell virtualenvwrapper indique dans son entête quelle est la procédure à suivre pour qu'il
    • perrmette l'utilisation facilitée de virtualenv (par exemple l'autocomplétion des commandes):
    • cf. les points 1 à 4 ci dessous
jpmena@jpmena-P34:~$ head -50 /usr/local/bin/virtualenvwrapper.sh | tail -20
#  1. Create a directory to hold the virtual environments.
#     (mkdir $HOME/.virtualenvs).
#  2. Add a line like "export WORKON_HOME=$HOME/.virtualenvs"
#     to your .bashrc.
#  3. Add a line like "source /path/to/this/file/virtualenvwrapper.sh"
#     to your .bashrc.
#  4. Run: source ~/.bashrc
#  5. Run: workon
#  6. A list of environments, empty, is printed.
#  7. Run: mkvirtualenv temp
#  8. Run: workon
#  9. This time, the "temp" environment is included.
# 10. Run: workon temp
# 11. The virtual environment is activated.
#
  • je crée un répertoire destiné à accueillir les environnements virtuels (dans monn cas $HOME/Python/.virtualenvs)
  • je modifie le script .bashrc de façon à avoir les 2 dernières lignes du diff ci dessous
jpmena@jpmena-P34:~$ mkdir $HOME/Python/.virtualenvs
jpmena@jpmena-P34:~$ diff -u .bashrc.backup04012016 .bashrc
--- .bashrc.backup04012016	2016-01-04 18:02:28.117247144 +0100
+++ .bashrc	2016-01-04 19:13:18.008580412 +0100
@@ -118,3 +118,13 @@
 export PATH="$HOME/.rbenv/bin:$PATH"
 eval "$(rbenv init -)"
 export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
+
+# The next line updates PATH for the Google Cloud SDK.
+source '/home/jpmena/Ateliers/google-cloud-sdk/path.bash.inc'
+
+# The next line enables shell command completion for gcloud.
+source '/home/jpmena/Ateliers/google-cloud-sdk/completion.bash.inc'
+
+#pour faire fonctionner le wrapper de virtualenvs
+export WORKON_HOME=$HOME/Python/.virtualenvs
+source /usr/local/bin/virtualenvwrapper.sh
 * en suivant les points 4 et 5 précédents, je teste:
jpmena@jpmena-P34:~$ source .bashrc # tous les paramètres vont dans l'environnement de mon terminal
jpmena@jpmena-P34:~$ lsvirtualenv #j'obtiens bien cette commande par autocomplétion

Mise en place d'un environnemment virtuel pour le Google App Engine

Ce que nous dit la commande mkvirtualenv

jpmena@jpmena-P34:~$ mkvirtualenv -h
Usage: mkvirtualenv [-a project_path] [-i package] [-r requirements_file] [virtualenv options] env_name

 -a project_path

    Provide a full path to a project directory to associate with
    the new environment.

 -i package

    Install a package after the environment is created.
    This option may be repeated.

 -r requirements_file

    Provide a pip requirements file to install a base set of packages
    into the new environment.

virtualenv help:

Usage: virtualenv [OPTIONS] DEST_DIR

Options:
  --version             show program s version number and exit
  -h, --help            show this help message and exit
  -v, --verbose         Increase verbosity.
  -q, --quiet           Decrease verbosity.
  -p PYTHON_EXE, --python=PYTHON_EXE
                        The Python interpreter to use, e.g.,
                        --python=python2.5 will use the python2.5 interpreter
                        to create the new environment.  The default is the
                        interpreter that virtualenv was installed with
                        (/usr/bin/python)
  --clear               Clear out the non-root install and start from scratch.
  --no-site-packages    DEPRECATED. Retained only for backward compatibility.
                        Not having access to global site-packages is now the
                        default behavior.
  --system-site-packages
                        Give the virtual environment access to the global
                        site-packages.
  --always-copy         Always copy files rather than symlinking.
  --unzip-setuptools    Unzip Setuptools when installing it.
  --relocatable         Make an EXISTING virtualenv environment relocatable.
                        This fixes up scripts and makes all .pth files
                        relative.
  --no-setuptools       Do not install setuptools (or pip) in the new
                        virtualenv.
  --no-pip              Do not install pip in the new virtualenv.
  --no-wheel            Do not install wheel in the new virtualenv.
  --extra-search-dir=DIR
                        Directory to look for setuptools/pip distributions in.
                        This option can be used multiple times.
  --never-download      DEPRECATED. Retained only for backward compatibility.
                        This option has no effect. Virtualenv never downloads
                        pip or setuptools.
  --prompt=PROMPT       Provides an alternative prompt prefix for this
                        environment.
  --setuptools          DEPRECATED. Retained only for backward compatibility.
                        This option has no effect.
  --distribute          DEPRECATED. Retained only for backward compatibility.
                        This option has no effect.

Ce qui donne dans le cas du Google App Engine (python 2.7)

  • Pour l'instant on ne spécifie que l'interpréteur Python (pas de requirements file)
jpmena@jpmena-P34:~$ mkvirtualenv -p python2.7 gaeprojects
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in gaeprojects/bin/python2.7
Also creating executable in gaeprojects/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaeprojects/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaeprojects/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaeprojects/bin/preactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaeprojects/bin/postactivate
virtualenvwrapper.user_scripts creating /home/jpmena/Python/.virtualenvs/gaeprojects/bin/get_env_details
  • on note la création de scripts vides qui sont appelé à l'activation/désactivation de l'environnement virtuel ...
  • La mise en oeuvre d'un projet sur le GAE fait l'objet d'une page à part