Installation Python 🐍

Python est largement utilisé en data science grâce à sa simplicité, sa polyvalence et son riche écosystème de bibliothèques. Il est devenu essentiel pour analyser des données, créer des visualisations et automatiser des tâches. Si une installation basique d'Anaconda ou de Python suffit pour débuter, en milieu professionnel, la gestion de projets multiples avec des versions et dépendances différentes devient rapidement complexe.

Maquette de l’environnement Python dégradé
Maquette de l’environnement Python « dégradé » (source XKCD)

Cette section vous guidera pour gérer vos environnements Python de manière efficace. Vous découvrirez comment aller au-delà des limites d'une installation classique et adopter des pratiques garantissant des projets stables, reproductibles et facilement partageables en équipe.

Les limites d'une installation classique

Bien que Windows, macOS et Ubuntu incluent souvent une version préinstallée de Python, ces versions système présentent plusieurs inconvénients. Tout d'abord, elles sont parfois obsolètes : par exemple, votre Mac pourrait encore utiliser Python 2.7 alors qu'une autre version plus récente est disponible. Ensuite, la coexistence de Python 2 et Python 3 entraîne une confusion fréquente : faut-il utiliser python ou python3 dans le terminal ? Quel pip correspond à quelle version ? Ces ambiguïtés peuvent provoquer des erreurs frustrantes, notamment lorsque des packages sont installés au mauvais endroit ou que des scripts sont exécutés avec une version incorrecte de Python.

En équipe, les problèmes s'aggravent. Vous pourriez avoir à gérer simultanément :

  • Un projet A utilisant Python 3.8
  • Un projet B basé sur Python 3.11
  • Un prototype fonctionnant avec Python 3.12

Avec une installation classique, il est impossible de répondre à cette flexibilité.

Les principaux problèmes rencontrés

En milieu professionnel, l'utilisation de Python peut entraîner des défis techniques majeurs liés à la gestion des dépendances et des versions. Voici quelques-uns des problèmes les plus fréquents :

  • Partage de code : Vos notebooks peuvent être inutilisables chez vos collègues si leurs versions de packages diffèrent. Par exemple, votre Pandas 2.0 peut être incompatible avec leur Pandas 1.5.
  • Conflits de dépendances : Certains packages nécessitent des versions spécifiques incompatibles entre elles. Par exemple, un package peut exiger NumPy 1.24, tandis qu'un autre refuse toute version supérieure à 1.23. C'est ce qu'on appelle l'enfer des dépendances (dependency hell).
  • Mises à jour risquées : Une nouvelle version majeure de Python ou d'un package peut améliorer les performances, mais casser votre code existant. Vous devez alors choisir entre rester sur une ancienne version ou prendre le risque de tout casser.

Pour surmonter ces défis, la communauté Python a développé des outils modernes. Ces outils permettent d'installer plusieurs versions de Python en parallèle et de créer des environnements isolés pour chaque projet. Dans cette section, nous utiliserons uv, un outil qui simplifie la gestion des versions et des dépendances de manière efficace.

📚 Pourquoi choisir uv ?

uv combine plusieurs fonctionnalités importantes pour les développeurs Python :

  • Gestion des versions Python : uv permet d'installer et de gérer plusieurs versions de Python, comme pyenv.
  • Création d'environnements virtuels isolés : uv facilite la gestion des environnements spécifiques à chaque projet, comme virtualenv ou venv.
  • Résolution intelligente des dépendances : uv gère efficacement les dépendances et sous-dépendances, à l'image de Poetry.
  • Installation rapide des packages :Écrit en Rust, uv est jusqu'à 100 fois plus rapide que pip.

Installation uv

Installer des packages directement avec pip (installation dite "directe") pose souvent problème : pip installe le package demandé sans vérifier la compatibilité de ses dépendances avec celles déjà présentes dans votre environnement. Cela peut entraîner des conflits ou casser d'autres projets. C'est précisément ce que l'on cherche à éviter.

Aujourd'hui, la communauté Python recommande des outils modernes pour simplifier l'installation et la gestion de Python. uv, développé en Rust, regroupe la gestion des versions, des environnements virtuels et des packages dans une seule solution simple et rapide.

Avec uv, chaque projet dispose d'un environnement virtuel isolé, incluant sa propre version de Python et ses dépendances. Cela évite les conflits entre projets et garantit une compatibilité parfaite. Vous pouvez ainsi gérer plusieurs versions de Python et de packages sans affecter le reste de votre système.

En plus de sa simplicité, uv automatise la gestion des environnements et des dépendances. Il permet également de partager facilement un projet grâce à ses fichiers de configuration, comme pyproject.toml et uv.lock, assurant une reproduction fidèle de l'environnement, quel que soit le système d'exploitation utilisé (Windows, macOS, Linux).

Avantages de uv :
  • Installation automatique : uv télécharge et installe les versions manquantes
  • Pas de compilation : uv utilise des binaires pré‑compilés
  • Gestion intégrée : versions Python, venv et packages

L'installation de uv est simple et rapide, quel que soit votre système d'exploitation. Voici les commandes à utiliser selon votre plateforme :

macOS
brew install uv
Linux / WSL2
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Vérification : uv --version

Installer une version Python avec uv

Une fois uv installé, vous pouvez facilement gérer différentes versions de Python avec ces commandes :

# Versions installées
uv python list --only-installed

# Toutes les versions disponibles
uv python list

# Installer une version spécifique
uv python install 3.11

# Installer plusieurs versions
uv python install 3.10 3.11 3.12

Configuration des versions Python avec uv

Pour garantir l'isolation et la reproductibilité de chaque projet, uv permet de configurer précisément la version de Python utilisée dans votre environnement. Voici quelques commandes utiles :

# Dans votre répertoire de projet
uv python pin 3.11

# Vérifier la version active
uv run python --version

# Afficher le chemin Python utilisé
uv run which python

Configuration de votre environnement virtuel

uv permet de créer facilement des environnements virtuels pour chaque projet, sans avoir besoin d'utiliser venv ou virtualenv. Voici comment procéder :

# Créer un venv avec une version précise
uv venv --python 3.11

Vous verrez un message du type : "Using Python 3.11.5 interpreter".

pyproject.toml : le standard pour les projets Python

Le fichier pyproject.toml sert de point central pour configurer un projet Python. Il décrit toutes les informations importantes : le nom du projet, sa version, ses dépendances, et la configuration des outils utilisés (comme les gestionnaires de paquets ou les outils de build).

Concrètement, pyproject.toml permet à n'importe quel outil compatible (par exemple uv, Poetry ou pip) de comprendre comment installer et configurer votre projet, sans avoir à jongler avec plusieurs fichiers différents. Cela facilite l'installation, la reproduction de l'environnement, la collaboration en équipe et la maintenance du projet sur le long terme.

Pour le moment, l’environnement n’est pas encore créé, il a simplement été déclaré dans le fichier pyproject.toml !

Pour créer l’environnement virtuel avec les packages déclarés, utilisez la commande suivante dans le terminal :
uv pip install

Un fichier uv.lock va apparaître dans votre dossier. Il contient les versions EXACTES de toutes les dépendances et sous-dépendances nécessaires pour reproduire votre environnement à l’identique, sans conflits de versions. Si un collègue vous partage son pyproject.toml (et éventuellement son uv.lock), il vous suffit de lancer uv pip install pour recréer l’environnement à l’identique.

L’environnement est prêt, mais pour l’utiliser dans votre terminal, vous pouvez exécuter vos commandes Python avec :
uv run python
ou ouvrir un shell dans l’environnement avec :
uv venv shell

Maintenant, vous êtes dans l’environnement virtuel isolé. Vous pouvez lancer votre Jupyter Notebook depuis le terminal avec la commande :
uv run jupyter lab

Quand vous avez terminé de travailler sur votre projet, quittez simplement le shell de l’environnement virtuel avec :
exit

Avec uv, vous pouvez aussi :

  • Désinstaller une dépendance : uv pip uninstall nom_du_package
  • Voir la liste des environnements virtuels créés : uv venv list
  • Afficher toutes les sous-dépendances d’un package : uv pip show nom_du_package --tree
  • Découvrir toutes les commandes disponibles : uv --help
Comment uv utilise pyproject.toml ?

uv s'appuie sur le fichier pyproject.toml pour gérer les dépendances et la configuration des projets Python :

  • Les dépendances sont déclarées dans la section [project.dependencies].
  • La configuration spécifique à uv est stockée dans la section [tool.uv].
  • Le fichier reste lisible par d'autres outils respectant la PEP 621.
Les avantages de l'approche uv

L'un des points forts de uv est sa capacité à générer un fichier uv.lock. Ce fichier verrouille les versions exactes des dépendances, garantissant une reproductibilité de l'environnement. De plus, uv peut lire les fichiers pyproject.toml créés par d'autres outils, ce qui facilite la migration depuis des gestionnaires comme Poetry ou pip.