Aller au contenu

Création et gestion des environnements virtuels Python

Environnements virtuels

Python possède l'outil virtualenv qui permet de créer des environnements virtuels à l'intérieur desquels vous pouvez installer les paquets Python. Ces environnements permettent de compartimenter les installations en fonction des besoins et d'y installer des versions spécifiques des paquets.

L'image suivante illustre les environnements virtuels Python :

Environnements virtuels et modules

On y voit trois environnements virtuels qui contiennent des paquets différents et de différentes versions. Ces environnements s'appuient sur des logiciels provenant des modules. Mais la plupart des modules Python sont installés via l'utilitaire pip.

Puisqu'il peut exister une dépendance forte entre certaines librairies fournies par des modules et les paquets python installés, la bonne pratique est de toujours charger les mêmes modules qui ont été utilisés pour la création et l'installation de paquets dans un environnement virtuel Python.

Pour ce faire, l'ordre de création d'un environnement virtuel Python est comme suit :

Ordre de création

Pour être certain que cet environnement soit pleinement fonctionnel lors de son utilisation ultérieure, il est important de respecter le même ordre de chargement, comme suit :

Ordre de utilisation

Information

Pour des raisons techniques, la gestion des environnements virtuels doit être effectuée sur le nœud frontal, dans une session Jupyter ou dans une session de la partition interactive.

Créer un environnement virtuel

Démarrer avec un environnement vierge :

module reset

Charger la version de python désirée et les autres modules requis :

module load python/3.12

Créer l'environnement virtuel :

virtualenv --no-download ~/venvs/mon-projet

Activer l'environnement virtuel :

source  ~/venvs/mon-projet/bin/activate

Normalement l'invite de commande devrait être préfixée par le nom de votre environnement virtuel, par exemple :

(mon-projet) $

On peut voir qu'il s'agit d'un environnement python avec les paquets de base :

(projet-a) $ pip list

Il est recommandé de mettre à jour le gestionnaire de paquets Python (pip) :

pip install --no-index --upgrade pip

Information

Pour des fins d'uniformité et de convention dans notre documentation, les environnements virtuels sont créés dans un dossier venvs dans votre dossier personnel ($HOME).

Cet emplacement peut être ajusté selon vos préférences.

Charger la version de Python désirée et autres modules si requis :

Information

Si vous prévoyez utiliser un environnement virtuel dans le JupyterLab, il est nécessaire de charger le module scipy-stack.

Pour une procédure rapide et recommandée pour l'utilisation, consultez la page suivante: Environnements personnalisés dans JupyterLab

Chercher des paquets dans la wheelhouse

La plupart des modules Python installés via pip sont des paquets binaires (wheels) provenant de ce qu'on appelle une wheelhouse.

Pour chercher des paquets dans la wheelhouse, il suffit d'utiliser la commande avail_wheels.

Par défaut, celle-ci cherche la dernière version disponible parmi les paquets disponibles pour la version de Python actuellement chargée, ou sinon, pour toutes les versions de Python disponibles pour l'environnement standard courant.

Il est possible de chercher en spécifiant un nom précis :

avail_wheels pandas

Chercher un paquet dont le nom contient "cdf" (peu importe la casse) :

avail_wheels --name "*cdf*"

Installer des paquets à partir de la wheelhouse

Invoquer la commande pip install avec l'option --no-index afin de forcer l'utilisation de la wheelhouse.

Dernière version de pandas à partir de la wheelhouse :

pip install --no-index pandas

Version particulière de SQLAlchemy :

pip install --no-index sqlalchemy==1.3.11

Pour installer plusieurs paquets, il est recommandé de tous les spécifier en même temps afin que la résolution de leur dépendances soit bien pris en compte :

pip install --no-index psycopg2 pgpasslib

Consulter les paquets qui sont actuellement installés :

pip list

Installer des paquets non présents dans la wheelhouse

Il suffit de ne pas utiliser l'option --no-index à la commande pip install. Ainsi, les paquets provenant de PyPI seront aussi recherchés.

pip install pandas

Forcer l'installation de paquets provenant de PyPI

La résolution des dépendances des paquets privilégie les installations provenant de la wheelhouse. Il est possible que ça ne fonctionne pas pour les versions les plus récentes de certains paquets. Dans ce cas, retirer la variable d'environnement PYTHON_PATH avant l'installation.

unset PYTHON_PATH
pip install mirp

Utiliser un environnement virtuel

Charger l'environnement logiciel (modules) associé à cet environnement virtuel :

module load StdEnv/2023 python/3.11

Activer l'environnement virtuel :

source ~/venvs/mon-projet

Liens utiles