12. Environnements virtuels et paquets¶
12.1. Introduction¶
Les programmes Python utilisent souvent des paquets et modules qui ne font pas partie de la bibliothèque standard. Ils nécessitent aussi, parfois, une version spécifique d’une bibliothèque, par exemple parce qu’un certain bug a été corrigé ou encore que le programme a été implémenté en utilisant une version obsolète de l’interface de cette bibliothèque.
Cela signifie qu’il n’est pas toujours possible, pour une installation unique de Python, de couvrir tous les besoins de toutes les applications. Basiquement, si une application A dépend de la version 1.0 d’un module et qu’une application B dépend de la version 2.0, ces dépendances entrent en conflit et installer la version 1.0 ou 2.0 laisse une des deux applications incapable de fonctionner.
La solution à ce problème est de créer un environnement virtuel (souvent aérienne appelé « virtualenv »), une arborescence de dossiers contenant une installation de Python autonome, d’une certaine version de Python, avec des paquets additionnels.
Différents programmes peuvent utiliser différents environnements virtuels. Pour résoudre le conflit précédent (des dépendances conflictuelles) l’application A peut avoir son propre environnement virtuel, avec la version 1.0 du module installée, pendant que l’application B à un autre environnement virtuel avec la version 2.0. Si l’application B nécessite une mise à jour de la bibliothèque en version 3.0, ça n’affectera toujours pas l’application A.
12.2. Création d’environnements virtuels¶
Le script utilisé pour créer et gérer des environnements virtuels est appelé pyvenv. pyvenv installe habituellement la version la plus récente de Python. Il existe aussi suffixé d’un numéro de version, de manière à pourvoir choisir la version de pyvenv ex exécutant par exemple pyvenv-3.4
(ou n’importe quelle autre version).
Pour créer un virtualenv, appelez le programme pyvenv avec en paramètre le nom du dossier dans lequel vous voulez l’installer :
pyvenv tutorial-env
Cela crée le dossier tutorial-env
(s’il n’existe pas) et des sous-dossiers contenant une copie de l’interpréteur Python, de la bibliothèque standard et quelques autres fichiers utiles.
Une fois le virtualenv créé, vous devez l’activer.
Sur Windows, lancez :
tutorial-env/Scripts/activate
Sur Unix et MacOS, lancez :
source tutorial-env/bin/activate
(Ce script est écrit pour le shell bash. Si vous utilisez csh ou fish, utilisez les variantes activate.csh
ou activate.fish
.)
Activer un virtualenv change votre invite shell pour vous indiquer quel virtualenv vous utilisez, et change votre environnement de manière à ce qu’en lançant python
, votre shell trouve le Python de votre virtualenv. Par exemple :
-> source ~/envs/tutorial-env/bin/activate
(tutorial-env) -> python
Python 3.4.3+ (3.4:c7b9645a6f35+, May 22 2015, 09:31:25)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python34.zip', ...,
'~/envs/tutorial-env/lib/python3.4/site-packages']
>>>
12.3. Gestion des paquets avec pip¶
Une fois un virtualenv activé, vous pouvez installer, mettre à jour, ou supprimer des paquets via un programme nommé pip. Par défaut pip installe ses paquets depuis le « Python Package Index », <https ://pypi.python.org/pypi>. Vous pouvez parcourir les paquets en allant sur PyPI avec votre navigateur, ou en utilisant la fonction de recherche, basique, de pip
(tutorial-env) -> pip search astronomy
skyfield - Elegant astronomy for Python
gary - Galactic astronomy and gravitational dynamics.
novas - The United States Naval Observatory NOVAS astronomy library
astroobs - Provides astronomy ephemeris to plan telescope observations
PyAstronomy - A collection of astronomy related tools for Python.
...
pip
a plusieurs sous-commandes : search
, install
, uninstall
, freeze
, etc. Consultez le guide Installation de modules Python pour une documentation exhaustive sur pip
.
Vous pouvez installer la dernière version d’un paquet simplement par son nom :
-> pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3
Il est aussi possible d’installer une version spécifique, en suffixant son nom de =
et le numéro de version :
-> pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0
Si vis exécutez cette commande à nouveau, pip
ne fera rien : il sera conscient que la version demandée est déjà installée. Vous pouvez fournir un numéro de version différent, et ainsi obtenir le paquet à la version demandée, ou lancer pip install --upgrade
pour mettre à jour le paquet vers sa version la plus récente :
-> pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
pip uninstall
suivi d’un ou plusieurs noms de paquets les supprime de votre environnement virtuel.
pip show
affichera des informations à propos d’un paquet donné :
(tutorial-env) -> pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:
pip list
énumère les paquets installés dans l’environnement virtuel courant :
(tutorial-env) -> pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)
pip freeze
produit aussi une liste de paquets installés, mais dans un format lisible par pip install
. Il est coutumier de ranger cette liste dans un fichier nommé requirements.txt
(tutorial-env) -> pip freeze > requirements.txt
(tutorial-env) -> cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
Le fichier requirements.txt
peut être archivé dans le système de contrôle de version, et livré comme une pièce de l’application. Les utilisateurs pourront ainsi installer les paquets nécessaires avec install -r
-> pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip
reconnait beaucoup d’autres options, documentées dans le guide Installation de modules Python. Lorsque vous avez écrit un paquet, si vous voulez le rendre disponible sur PyPI, lisez le guide Distribuer des modules Python.