- Après un an d’utilisation de uv dans plusieurs environnements clients, l’outil simplifie fortement le démarrage de projets Python et la gestion des dépendances ; quand l’environnement le permet, il mérite d’être essayé en premier
- Il conserve presque entièrement le workflow pip/venv existant tout en étant plus rapide et plus fiable, ce qui rend le coût de migration relativement faible
- En regroupant installation de Python, environnements virtuels, fichiers de verrouillage, exécution, build et exécution d’outils temporaires dans un seul outil, il réduit fortement le coût d’expérimentation des projets
- En revanche, les échecs de résolution de dépendances legacy, le périmètre de prise en charge de
python-build-standalone, un cache pouvant dépasser 20 Go, les politiques de sécurité d’entreprise et la barrière de la CLI sont des limites bien réelles - Si vous travaillez durablement avec Python, même en utilisant uv, vous devez connaître pip et venv, afin d’être prêt pour les environnements où uv n’est pas autorisé ou pas adapté
Là où les projets Python commencent à se compliquer
- La racine du plus gros problème en Python se trouve dans le bootstrap : préparer Python lui-même et démarrer un nouveau projet
- Une grande partie des problèmes de packaging rencontrés ensuite vient moins de l’installation des dépendances ou du build des packages que de l’installation initiale de Python et de la configuration du projet
- La manière d’installer Python varie selon les OS, avec des valeurs par défaut et des pièges différents
- Même si Python est un langage adapté aux débutants, son installation suppose beaucoup de connaissances préalables
- Python est utilisé par des publics très divers : étudiants, data scientists, développeurs IA, développeurs web, administrateurs système, biologistes, géographes, développeurs de plugins, etc.
- Les environnements d’exécution diffèrent énormément — machines Windows d’entreprise, ordinateurs personnels sous Debian, universités, administrations, startups, armée, laboratoires, grandes entreprises — si bien qu’un seul tutoriel peut difficilement couvrir tout le monde
PATH,PYTHONPATH, la coexistence de plusieurs versions de Python, les paquets optionnels sous Linux, Python comme dépendance système et la popularité des extensions compilées augmentent encore la complexité- Un bon outil de gestion de projets Python doit remplir les conditions suivantes
- Fonctionner indépendamment du bootstrap de Python
- Unifier l’installation et l’exécution de Python entre plateformes et contextes
- Servir de pont avec les outils de base comme
pipetvenv - Disposer d’un résolveur de dépendances puissant
- Gérer facilement les installations simples, mais aussi les tâches complexes comme installer sur un autre OS des dépendances verrouillées
- Être facile à installer et à utiliser, et assez fiable pour qu’on lui confie une partie importante de la stack
La méthode de bootstrap de uv
- uv s’installe et se met à jour de manière totalement indépendante de Python ; l’installation de uv et celle de Python ne s’influencent pas mutuellement
- Les problèmes de bootstrap de Python, de
PATHet d’import n’affectent pas uv lui-même - Cela réduit les confusions comme savoir s’il faut installer l’outil au niveau système ou dans un environnement virtuel, ou quels effets de nouveaux mots-clés ou dépréciations Python pourraient avoir sur uv
- uv a d’abord fourni des interfaces
pipetvenv, afin de pouvoir être utilisé avec les projets, outils et habitudes existants- C’est un choix qui tient compte de la communauté existante et du code legacy
- Les utilisateurs peuvent l’utiliser comme un workflow
pip·venvclassique sans apprendreuv run,uv addouuvx - Le simple gain de vitesse et de fiabilité sur les tâches de base suffit déjà à justifier une migration
- Il propose aussi l’installation de Python
- De manière unifiée sur tous les OS
- Sans droits administrateur
- Indépendamment du Python système
- Sans conflit même avec plusieurs versions installées
- Avec la même bibliothèque standard,
tkinterinclus - Avec aussi des versions Pypy, No-GIL et TCO
- Sans shim, compilation ni valeurs par défaut déraisonnables
Expérience d’installation de Python et python-build-standalone
- L’exemple
uv python install pypy3.8installe Python 3.8.16 en 2,71 secondes - La même commande peut être exécutée sur Mac ou Windows
- Il n’y a pas de paquets manquants liés à Tcl, OpenSSL ou Gzip, pas de conflits avec d’autres sources d’installation de Python, pas de paradigmes différents selon l’OS, pas de commandes absentes ni de
PATHmal configuré - L’installation de Python par uv s’appuie sur python-build-standalone, un projet qu’Astral a repris et améliore
- Astral cherche à faire remonter ces bénéfices vers le projet amont cPython, et a aussi contribué à des projets open source voisins
Fonctions de gestion de projet
uv initcrée par défaut un dépôt git contenant.venv,pyproject.toml, un.gitignorepour Python,README.mdethello.py- Les dépendances racine peuvent être déclarées dans
pyproject.tomlou ajoutées avecuv add uv removenettoie correctement le dépôtuv lock --upgrade-package <package>==<version>permet de mettre à jour prudemment les packages, une version à la foisuv buildcrée un package.whlà partir du projet, mais uv n’exige pas que le projet soit buildableuv runexécute une commande dans l’environnement virtuel même si celui-ci n’est pas activé- L’utilisateur n’a pas besoin de connaître l’existence de l’environnement virtuel ni le concept d’activation
- Ces commandes mettent à jour le fichier de verrouillage automatiquement et de manière transparente
- Comme uv est rapide, on remarque à peine que la mise à jour a lieu
- L’utilisateur n’a pas besoin de savoir ce qu’est un fichier de verrouillage
- Le fichier de verrouillage est multiplateforme, ce qui permet de développer sous Windows et de déployer sous Linux
Performances, stabilité et messages d’erreur
- Les performances de uv réduisent le coût de l’installation des dépendances et de l’expérimentation sur les projets
- On peut repartir rapidement de zéro et répéter plusieurs essais sans friction
- Des outils comme
pyenv,pipenvoupoetryse sont parfois cassés avec des stack traces dans différents environnements, mais uv s’est montré très robuste - Trois aspects de la qualité chez Astral ressortent particulièrement
- Les corrections de bugs sont rapides, avec une bonne réactivité aux retours et aux rapports
- La culture de test est forte, et la suite de tests de résolution de dépendances est fournie comme package séparé
- Les messages d’erreur sont excellents
- L’exemple
uv add httpie==2montre étape par étape quehttpie==2.0.0dépend derequests>=2.22.0, alors que le projet dépend derequests==1, rendant les exigences impossibles à satisfaire - Les messages d’erreur de résolution de dépendances sont influencés par pubgrub, mais les messages d’erreur de uv dans son ensemble suivent la même direction
- Utilisé en contexte pédagogique, uv a permis aux étudiants d’être productifs sans intervention importante, une expérience qui ne s’est pas retrouvée avec d’autres outils
- Les nouveaux projets professionnels bénéficient facilement des avantages de uv, mais des blocages peuvent apparaître sur des projets legacy
uvx et de nouveaux usages
- uv fournit des briques de base solides et rapides pour préparer et isoler Python et ses dépendances
- Auparavant, préparer Python et les dépendances était une contrainte lente et fragile ; avec uv, cela devient une fonctionnalité permettant d’ajuster les workflows
uv run --with jupyter jupyter notebooklance Jupyter dans le projet courant sans ajouter Jupyter ni ses dépendances au projetuvx --with pendulum -p 3.13t pythontélécharge et installe un nouveau build Python No-GIL, crée un environnement virtuel temporaire, installependulum, puis lance un shell Pythonuvxest un outil comparable ànpxpour Python, et peut être vu comme une version bien faite depipx- La prise en charge des dépendances inline change la manière d’utiliser des dépendances dans de petits scripts Python
- Avant, il fallait éviter les dépendances dans les petits scripts ou recourir à des contournements pénibles
- Désormais, on peut utiliser des dépendances d’une façon rapide, transparente et auto-documentée
- Ces fonctionnalités ne sont pas imposées : les utilisateurs peuvent les découvrir et les adopter quand ils en ont besoin
Là où uv échoue ou se montre inconfortable
- uv ne peut pas résoudre à lui seul les vrais problèmes de packaging
- Les marqueurs de version incorrects, l’absence de wheel ou les collisions de noms échappent à son contrôle
- Ces problèmes sont inhérents à la qualité des données présentes sur PyPI
- Si les problèmes de packaging diminuent avec uv, c’est parce qu’il gère correctement les autres aspects
- Son résolveur de dépendances plus strict peut casser des environnements virtuels de projets legacy qui reposaient sur la résolution plus laxiste d’anciennes versions de
pip- Dans le cas d’une base de code vieille de 15 ans, à peine migrée vers Python 3 et construite sur un historique
pip freezenon nettoyé, uv n’a pas fonctionné
- Dans le cas d’une base de code vieille de 15 ans, à peine migrée vers Python 3 et construite sur un historique
- L’installation Python intégrée de uv est limitée aux versions construites avec
python-build-standalone- Les installateurs de python.org, deadsnake et pyenv permettent d’installer davantage de versions de Python
- Cela peut poser problème pour d’anciens projets nécessitant une version précise de Python
- uv fonctionne aussi très bien avec un Python installé à l’extérieur, ce qui n’en fait pas un blocage absolu
- Les exécutables
python-build-standalonepeuvent être légèrement plus lents- D’après
pyperformance, la version 3.10 de uv était 3 % plus lente que le Python d’Ubuntu - On peut aussi vouloir utiliser un Python compilé avec des optimisations matérielles
- D’après
- L’espace occupé par le cache peut aussi être un inconvénient
- Après un an d’utilisation, le cache de uv occupait plus de 20 Go sur le disque
- On peut le supprimer avec
uv cache clean, mais on perd alors l’avantage de vitesse - Contrairement à
pip, uv crée des liens physiques vers les packages pour qu’ils n’occupent l’espace qu’une seule fois ; il peut donc au final consommer moins que plusieurs environnements virtuels complets auparavant
$UV_PYTHONavait l’inconvénient de forcer une version de Python au lieu de seulement fournir une version par défaut, et le problème associé est en cours de traitement- uv est open source, mais c’est un produit de la société commerciale Astral
- Astral n’est pas encore rentable et n’a pas encore dévoilé de produit commercial
- Certains estiment qu’il faut rester prudent avant de lui confier une partie importante de sa stack
- À l’inverse, le coût de migration vers uv comme celui d’une sortie de uv restent faibles
- La principale limite concerne l’adoption en entreprise
- Dans les environnements de grandes entreprises fortement sécurisés et verrouillés, installer de nouvelles dépendances est très difficile
- Si le service sécurité IT contrôle ce qui peut être fait sur les machines, il peut ne pas autoriser l’installation de uv
- Tant que l’outil n’a pas atteint une version stable et satisfait différentes exigences, les contraintes en entreprise resteront importantes
- La CLI constitue aussi une barrière
- Tous les utilisateurs de Python ne sont pas à l’aise avec la ligne de commande, en particulier sous Windows
- C’est aussi l’une des raisons pour lesquelles Anaconda dispose d’une interface graphique
- Exiger un outil en CLI crée une barrière à l’entrée pour les grands débutants
uvxetuv tool install, commepipx, incitent à installer des outils en dehors du projet- C’est adapté à des outils indépendants comme
yt-dlpouhttpie - Pour des outils de développement comme
mypy, sensibles à la version de Python ou à la syntaxe des bibliothèques, une installation avec une version de Python différente de celle du projet peut causer des problèmes
- C’est adapté à des outils indépendants comme
Quand éviter uv
- Il y a cinq situations où il ne faut pas utiliser uv
- Vous avez un projet legacy qui ne fonctionne pas avec la résolution de dépendances de uv, et vous n’avez pas la capacité ou l’envie de le nettoyer pour migrer
- Votre environnement d’entreprise n’autorise pas l’utilisation de uv
- Vous ne lui faites pas confiance parce qu’il n’est pas encore en version stable, parce qu’Astral n’a pas encore de produit commercial ou parce que le vivier de contributeurs Rust est réduit
- Vous avez besoin d’une version précise de Python que uv ne fournit pas, et vous ne souhaitez pas utiliser uv avec un Python installé à l’extérieur
- La CLI est un obstacle trop important pour votre équipe
- Les questions de confiance et de version précise de Python relèvent davantage d’un choix que d’un blocage technique
- Face aux limitations d’un environnement d’entreprise, l’utilisateur n’a pas beaucoup de marge de manœuvre
- Les principaux points à considérer en pratique sont les dépendances legacy et la barrière de la CLI
- Le conseil est simple
- Essayez toujours uv en premier
- Si cela ne fonctionne pas, revenez à l’ancienne méthode ou cherchez un contournement
- Si la CLI pose problème, on peut utiliser l’installateur de python.org pour préparer Python et proposer un plugin d’IDE qui enveloppe uv
- Une personne capable de programmer a de bonnes chances d’apprendre les bases de ligne de commande nécessaires pour utiliser uv
Sa place à l’avenir
- Pour être utilisé en entreprise, il reste un écart à combler jusqu’à la v1 ; comme les entreprises mettent difficilement à jour fréquemment, une version stable est importante
- On peut s’attendre à l’ajout d’une fonction de bundling pouvant servir d’alternative à pex/shiv, ainsi qu’à un backend de build
- La génération d’installateurs pour applications semble une conclusion logique, mais elle est beaucoup plus complexe, ne serait-ce que parce que la signature est difficile à bien gérer
- Une fois le support des tâches clarifié, l’outil aura suffisamment de fonctionnalités pour les besoins personnels
- Si Python est votre métier, vous devez toujours apprendre à utiliser
pipetvenv- Parce qu’un jour, vous pourrez vous retrouver dans une situation où uv n’est pas utilisable
- En conclusion, uv est une solution Pareto à faible coût et à forts bénéfices : dans les environnements où il est utilisable, il vaut la peine d’être essayé en premier
Aucun commentaire pour le moment.