[JOUR 16] II. Python, the right way : Configuration de projet avec UV
Configurer un projet Python comme un pro
Sommaire :
I. La manière classique : venv et requirements.txt
II. La manière plus professionnelle : Poetry et UV
III. UV
IV. Créer un projet Python avec UV
I. La manière classique : venv et requirements.txt
Lorsque vous démarrez un projet Python, la plupart du temps vous allez avoir recours à des dépendances, c’est-à-dire à d'autres librairies (des packages) que vous utiliserez dans votre projet. Pour sauvegarder la liste des librairies utilisées, vous utiliserez la commande pip freeze > requirements.txt
pour stocker la liste des dépendances dans un fichier requirements.txt
.
Si vous partagez votre projet avec d’autres développeurs, ils pourront télécharger toutes les dépendances de votre projet en exécutant pip install -r requirements.txt
dans leur environnement virtuel.
Cette manière de faire permet non seulement de sauvegarder la liste des packages que vous utilisez, mais aussi de partager seulement un fichier contenant les dépendances, plutôt que de partager l’entièreté des dépendances, ce qui est beaucoup plus léger et simple à partager.
II. La manière plus professionnelle : Poetry et UV
Maintenant, dans un cadre plus professionnel, nous privilégions d’autres méthodes pour gérer les dépendances de nos projets et leur configuration. Typiquement, nous utilisons des outils comme Poetry ou UV, qui offrent tout deux plus ou moins le même type de fonctionnalités.
Ces outils offrent plusieurs avantages par rapport à l'utilisation d'un simple fichier requirements.txt
:
Gestion des dépendances plus robuste : Ces outils utilisent des fichiers de verrouillage (lock files) qui stockent les versions exactes de toutes les dépendances, y compris les dépendances indirectes, assurant ainsi un moyen reproductible de lancer le projet.
Résolution de dépendances améliorée : Ils disposent de meilleurs résolveurs de dépendances que pip, trouvant des combinaisons de versions compatibles plus efficacement.
Gestion des environnements virtuels : Poetry et UV gèrent automatiquement la création et l'activation des environnements virtuels, simplifiant le workflow.
Configuration centralisée : Ils permettent de centraliser la configuration du projet (dépendances, outils de développement, métadonnées) dans un seul fichier pyproject.toml, réduisant le nombre de fichiers de configuration.
Facilité de publication : Ces outils simplifient le processus de construction et de publication des packages sur PyPI.
Gestion des versions Python : UV peut automatiquement télécharger et installer la version Python spécifiée pour le projet, remplaçant ainsi des outils comme pyenv.
Groupes de dépendances : Poetry permet de définir des groupes de dépendances (dev, prod, test) facilitant la gestion de différents environnements.
En résumé, ces outils offrent une approche plus complète et intégrée de la gestion de projets Python, allant au-delà de la simple liste de dépendances fournie par requirements.txt. C’est donc une méthode de choix pour bien configurer nos projets.
III. UV
UV est arrivé assez récemment mais cet outil met déjà tout le monde d’accord concernant la configuration de projet. Poetry était largement utilisé précédemment, mais depuis, UV offre plusieurs avantages par rapport à ce dernier, notamment au niveau de la rapidité, vu que UV est écrit en Rust :
Vitesse d'installation : UV installe les dépendances beaucoup plus rapidement que Poetry.
Gestion intégrée des versions Python : UV remplace pyenv en permettant de télécharger et d'installer automatiquement les versions de Python nécessaires pour un projet.
Synchronisation automatique : La commande
uv run
s'assure que les dépendances sont synchronisées avant d'exécuter un script, ce qui évite d'avoir à lancer une commande d'installation séparée.Gestion simplifiée des versions Python : UV utilise le fichier
.python-version
pour spécifier la version de Python requise, et l'installe automatiquement si nécessaire.Déploiement facilité : Lorsqu'on pousse des changements en production, UV installe automatiquement la bonne version de Python spécifiée dans le fichier
.python-version
.Installation rapide des versions Python : UV peut installer une nouvelle version de Python en quelques secondes, contrairement à pyenv qui peut prendre plusieurs minutes.
Ces avantages font d'UV un outil plus rapide et plus pratique pour la gestion des environnements Python et des dépendances, simplifiant ainsi tout le workflow des projets Python.
IV. Créer un projet Python avec UV
Pour configurer un projet Python avec UV, suivez ces étapes :
Tout d’abord il vous faut installer UV sur votre machine Ubuntu :
curl -LsSf https://astral.sh/uv/install.sh | sh
Créez un nouveau répertoire pour votre projet et accédez-y :
mkdir mon_projet_uv
cd mon_projet_uv
Initialisez le projet avec UV :
uv init
Cette commande génère une structure de base comprenant un fichier
pyproject.toml
, unREADME.md
, un.python-version
et un script Python d'exemplehello.py
. Vous pouvez afficher le fichierpyproject.toml
pour voir comment il est structuré.Créez un environnement virtuel pour votre projet :
uv venv
Cela crée un environnement virtuel isolé pour votre projet.
Activez l'environnement virtuel :
source venv/bin/activate
Installez les dépendances nécessaires :
uv add nom_du_package # par exemple cowsay
Vous pouvez retirer des packages avec uv remove nom_du_package.
Si vous jetez un oeil à votre fichier pyproject.toml vous verrez que uv ajoute ou enlève le package dans la partie dependencies.
Vous pouvez ajouter plusieurs packages en une seule commande comme pip.
uv add package_1 package_2
Pour exécuter votre script Python, utilisez :
uv run hello.py
#j'ai ajouté de nouveau le package cowsay et j'ai placé le code utilisé dans le cours précédent dans le fichier hello.py.
Et voilà ! Pour résumer UV simplifie la gestion des versions Python, la création d'environnements virtuels et l'installation de packages, offrant une alternative rapide et efficace aux outils traditionnels comme pip, poetry, et venv.