Aller au contenu

Python

Sur les machines Linux du CIRRELT/GERAD, il y a une version de python3 installée mais, ça ne sera pas la version a plus récente ce qui peut amener des problèmes de compatibilité avec les librairies que vous souhaitez utiliser.

Modules

D'autres versions sont disponibles en chargeant un des modules python. Vous pouvez obtenir une liste de ce qui est disponible avec cette commande:

module avail python

Vous pouvez ensuite charger la version par défaut de cette façon:

module load python

ou vous pouvez aussi spécifier explicitement la version que vous voulez.

Environnement virtuel

Un environnement virtuel Python est un espace isolé où vous pouvez installer des librairies Python sans affecter les packages installés sur votre système global. Cela permet de travailler sur des projets Python avec des dépendances spécifiques sans avoir à vous soucier de conflits avec d'autres projets.

Pour créer et utiliser un environnement virtuel Python, il faut suivre ces étapes:

  • Naviguez dans le répertoire racine de votre projet et exécutez la commande suivante dans votre terminal :
python3 -m venv projet1

Cela crée un nouvel environnement virtuel dans un dossier appelé projet1 dans le répertoire ou vous êtes.

  • Activez l'environement virtuel Après avoir créé votre environnement virtuel, vous devez l'activer avant de pouvoir y installer des packages ou exécuter des scripts Python. Pour activer l'environnement virtuel, exécutez la commande suivante :
source projet1/bin/activate
  • Pour désactiver l'environement virtuel, exécuter la commande suivante dans votre terminal :
deactivate

UV

uv permet d'installer python et aussi des librairies Python. C'est une alternative à des outils comme pip, pyenv, venv,pipx, poetry, etc.

Pour pouvoir l'utiliser, vous n'avez qu'à charger le module:

module load uv

Installer une version spécifique de python

uv permet entre autre de gérer l'interpréteur python à utiliser et peut installer sa propre version.

Pour obtenir une liste des interpréteurs disponibles, vous pouvez utiliser la commande:

uv python list

Vous pouvez ensuite faire l'installation que vous voulez, par exemple

uv python install 3.13

À noter que depuis la version 3.13 de python, il y a 2 variantes. La version traditionnelle et la version freethreaded qui n'a pas le verrou global (GIL), ce qui permet d'être plus performant si vous avez une application parallèle. Toutefois, si votre programme est séquentiel, la version traditionnelle est plus efficace.

Vous pouvez installer plusieurs versions:

uv python install 3.12 3.13 3.13t

Initialisation

Pour pouvoir utiliser uv pour un projet, il faut d'abord faire une initialisation.

Par exemple dans un répertoire projet1 dans lequel vous souhaitez utiliser uv.

uv init

Cette commande va créer plusieurs fichiers:

  • pyproject.toml: le fichier de configuration
  • .python-version: la version de Python à utiliser
  • README.md: un fichier markdown vide
  • main.py: un programme de test.

Gestion des dépendances

Dans la plupart des programmes, vous allez utiliser des librairies additionnelles.

Vous pouvez les ajouter comme ceci:

uv add numpy scipy polars ruff

Si plus tard, vous n'avez plus besoin d'une librairie, vous pouvez l'enlever. Par exemple, pour ruff, cette librairie n'est pas nécessaire au fonctionnement du logiciel mais, très utile pour le développement. Pour ce cas spécifique, nous allons simplement le supprimer des dépendances:

uv remove ruff

Si on le souhaite, on pourrait l'ajouter dans le groupe dev comme ceci:

uv add --dev ruff

Toutes ces dépendances sont ajoutées au fichier pyproject.toml qui ressemble à ceci:

[project]
name = "projet2"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
    "numpy>=2.4.4",
    "polars>=1.40.1",
    "ruff>=0.15.11",
    "scipy>=1.17.1",
]


[dependency-groups]
dev = [
    "ruff>=0.15.11",
]

Vous pouvez aussi éditer ce fichier pour ajuster les dépendances. Prenez le temps d'ouvrir le fichier pour changer les information génériques qui ont été créees lors de l'initialisation.

Le fichier pyproject.toml contient la liste des librairies que vous avez demandé, le fichier uv.lock contient la liste des librairies qui ont été véritablement installées.

Outils

Pour l'outil ruff, il risque d'être utilsé dans tous les projets alors on peut l'installer comme outil et l'utiliser plus tard avec uvx.

uv remove --dev ruff
uv tool install ruff
uvx ruff check

jupiter est un autre outil qu'on ourrait vouloir utiliser. Naturellement, on essaierait cette commande:

uv tool install jupyter

Plusieurs librairies seront installées mais, à la fin vous allez avoir ce message:

No executables are provided by package `jupyter`; removing tool
hint: An executable with the name `jupyter` is available via dependency `jupyter-core`.
      Did you mean `uv tool install jupyter-core`?

Dans ce cas, effectivement, on aurait dû installer jupyter-core et non jupyter.

On peut voir la liste de nos outils installés comme ceci:

uv tool list

Comme il y aura de nouvelles version éventuellement, on peut mettre à jour tous en même temps avec cette commande (on peut aussi le faire pour un seul):

uv tool upgrade --all

Exécution d'un programme

Maintenant que nous avons nos dépendances et notre code prêt, on souhaite l'exécuter. Pour cela, nous pouvons utiliser la commande:

uv run main.py

Cette commande va activer l'environnement virtuel et s'assurer que les dépendances du fichier pyproject.toml sont à jour et exécuter le programme.

Lancer un interpréteur Python

Habituellement, si vous voulez un python interactif, vous utiliseriez la commande python. Si vous faites cela, vous allez utiliser la version python qui est dans votre liste de chemins d'exécution et vous n'aurez pas accès aux librairies que vous avez installées.

Vous pouvez faire ceci plutôt:

uv run python

Synchroniser l'environnement

Si vous clonez un projet existant ou si vous héritez d'un code déjà existant, vous pouvez faire ceci:

uv sync

Cette commande lit uv.lock et installe exactement les mêmes versions de paquets. Ceci va aider à reproductibilité.

Par défaut, cette commande va tout installer, incluant les outils devs s'il y en a. Si vous voulez seulement faire tourner le code, vous pouvez ajouter l'option de ne pas installer ces outils.

uv sync --no-dev

Mise à jour des dépendances

De temps à autre, il est nécessaire de mettre à jour nos dépendances.

Pour une librairie spécifique :

uv lock --upgrade-package numpy
uv sync

Pour tout mettre à jour:

uv lock --upgrade
uv sync

Changement de version de python

Si au départ, votre projet a été créé avec la version 3.13 et que la version 3.14 est maintenant disponible, vous pouvez changer de version facilement.

On commence par installer la nouvelle version comme vu plus tôt

uv python install 3.14

Ensuite, on change la version par défaut

uv python pin 3.14

On synchronise pour la nouvelle version

uv lock
uv sync

uv va recréer l'environnement avec Python 3.14 et va réinstaller toutes les dépendances compatibles.

Si une librairie n'est pas compatible avec la nouvelle version, uv lock vous avertira. Vous devrez alors :

  • Attendre une mise à jour de la librairie
  • Chercher une alternative
  • Restreindre la version dans pyproject.toml
  • Retourner à la version précédente de python en attendant

Finalement lorsque tout est correct, changez votre fichier pyproject.toml pour indiquer que le projet exige la nouvelle version. Changez simplement ceci dans le fichier:

requires-python = ">=3.14"

et supprimez la version de python dont vous n'avez plus besoin. Évidemment si vous avez plus d'un projet, ne la supprimez pas tant que tous les projets n'ont pas été migrés à la dernière version.

uv python uninstall 3.13

Nettoyage de la cache

Lorsque vous avez terminé d'installer toutes les librairies dont vous avez besoin pour votre projet, vous devriez nettoyer les fichier téléchargés dans la cache pour libérer de l'espace dans votre compte.

uv cache clean