1 points par GN⁺ 2025-02-19 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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 pip et venv
    • 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 PATH et 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 pip et venv, 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·venv classique sans apprendre uv run, uv add ou uvx
    • 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, tkinter inclus
    • 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.8 installe 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 PATH mal 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 init crée par défaut un dépôt git contenant .venv, pyproject.toml, un .gitignore pour Python, README.md et hello.py
  • Les dépendances racine peuvent être déclarées dans pyproject.toml ou ajoutées avec uv add
  • uv remove nettoie correctement le dépôt
  • uv lock --upgrade-package <package>==<version> permet de mettre à jour prudemment les packages, une version à la fois
  • uv build crée un package .whl à partir du projet, mais uv n’exige pas que le projet soit buildable
  • uv run exé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, pipenv ou poetry se 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==2 montre étape par étape que httpie==2.0.0 dépend de requests>=2.22.0, alors que le projet dépend de requests==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 notebook lance Jupyter dans le projet courant sans ajouter Jupyter ni ses dépendances au projet
  • uvx --with pendulum -p 3.13t python télécharge et installe un nouveau build Python No-GIL, crée un environnement virtuel temporaire, installe pendulum, puis lance un shell Python
  • uvx est un outil comparable à npx pour Python, et peut être vu comme une version bien faite de pipx
  • 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 freeze non nettoyé, uv n’a pas fonctionné
  • 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-standalone peuvent ê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
  • 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_PYTHON avait 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
  • uvx et uv tool install, comme pipx, incitent à installer des outils en dehors du projet
    • C’est adapté à des outils indépendants comme yt-dlp ou httpie
    • 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

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 pip et venv
    • 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.

Aucun commentaire pour le moment.