uv, le gestionnaire de paquets et de projets Python ultra-rapide écrit en Rust
(github.com/astral-sh)- uv est un outil de gestion de paquets et de projets Python extrêmement rapide, basé sur Rust
- Il peut remplacer à lui seul pip, pip-tools, pipx, poetry, pyenv, virtualenv, etc.
- Il offre des performances jusqu’à 10 à 100 fois supérieures, une économie d’espace disque, un cache robuste et un support cross-platform
- Il inclut un environnement de développement intégré pour la gestion des scripts, des projets, des outils et de multiples versions de Python
- Il permet de mettre en place un workflow moderne de développement Python, optimisé pour la productivité, les projets de grande taille et les itérations rapides
Présentation de l’open source et points de différenciation
- uv regroupe dans un seul outil les fonctions de plusieurs gestionnaires Python existants comme pip, pip-tools, pipx, poetry, pyenv, virtualenv, twine
- Développé en Rust, il offre des performances remarquables, avec des vitesses d’installation et de synchronisation 10 à 100 fois plus rapides que pip traditionnel
- Grâce à un cache global et à la déduplication des dépendances, il permet une optimisation de l’usage du disque, tout en proposant une CLI intuitive et une compatibilité familière avec pip
- Il peut être installé comme exécutable autonome sur macOS, Linux et Windows
- Son installation autonome, son intégration avec pip et pipx, ainsi que sa mise à jour automatique native en font un outil particulièrement pratique
Principales caractéristiques (Highlights)
- Un seul outil, uv, permet de remplacer de nombreuses fonctions de pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv, etc.
- Il fournit des performances d’installation / mise à jour / synchronisation 10 à 100 fois plus rapides que pip
- Il prend en charge la gestion des dépendances de projet sur la base de lockfiles, ainsi que les workspaces et un universal lockfile
- Il permet la déclaration inline des dépendances de scripts et l’exécution avec isolement automatique de l’environnement
- Il prend en charge l’installation, la gestion et le changement de multiples versions de Python
- Il permet d’exécuter et d’installer des outils distribués sous forme de paquets Python (en remplacement de pipx)
- Il est compatible avec l’interface pip et ajoute des fonctions avancées (override de versions, résolution indépendante de la plateforme, etc.)
- Son workspace de style Cargo est optimisé pour les projets de grande taille
- Son cache global réduit au minimum la duplication des dépendances et améliore l’efficacité de l’espace disque
- Il peut être installé et utilisé via curl, pip ou pipx, sans environnement Rust/Python préalable
- Il prend en charge plusieurs plateformes, notamment macOS, Linux et Windows
- Il est développé par l’équipe à l’origine d’Astral et de Ruff
Gestion de projet (Project Management)
- Il prend entièrement en charge, au niveau du projet, les dépendances, environnements, fichiers de verrouillage (lock) et workspaces
- La commande
uv initinitialise automatiquement un projet et crée un virtualenv uv addpermet d’ajouter des dépendances, tandis queuv locketuv syncautomatisent la synchronisation des paquets et les audits de sécurité- Il remplace les fonctionnalités d’outils modernes de gestion de projet Python comme Poetry ou Rye, tout en garantissant des performances de traitement supérieures
- Il prend aussi en charge le build et la publication (
publish) de projets qui ne sont pas gérés par uv
Gestion des scripts (Scripts)
- Il permet de déclarer des métadonnées de dépendances inline dans un script mono-fichier
- Lors de l’exécution d’un script, il prend en charge l’isolement automatique du virtualenv et l’installation des dépendances
uv add --scriptpermet de gérer les dépendances par script, et la commandeuv runexécute le script dans un environnement isolé- Il est particulièrement adapté aux scripts ponctuels, comme en data science ou en automatisation
Gestion des outils (Tools)
- Il permet d’installer et d’exécuter des outils CLI empaquetés en Python, à la manière de pipx
- Les commandes
uv tool installetuvxpermettent une exécution temporaire ou globale - Il prend en charge l’inspection des outils installés, la gestion des versions et les mises à jour
Gestion des versions de Python
- Il permet d’installer facilement plusieurs versions de Python et de basculer instantanément entre elles
- Il permet de gérer plusieurs versions en parallèle et de définir un pin
.python-versionpar projet - Des implémentations alternatives comme pypy sont également prises en charge via la même interface
- Les commandes
uv python install/pinpermettent d’installer, de sélectionner et d’activer une version
Interface pip (Pip Interface)
- Avec
uv pipetuv venv, il remplace entièrement pip, pip-tools et virtualenv - Il inclut des fonctions avancées comme l’override des versions de dépendances, la résolution indépendante de la plateforme et les builds reproductibles
- Il agit comme un remplaçant drop-in de pip sans changer les workflows existants, tout en apportant un gain de performances de 10 à 100 fois
- Il prend en charge la conversion
requirements.in→requirements.txt, la création de virtualenvs et la synchronisation des requirements
Plateformes et politique de versions
- Il prend en charge divers systèmes d’exploitation : Windows, macOS et Linux
- Les informations sur la politique et les plateformes supportées sont disponibles dans la documentation officielle
Contribution (Contributing)
- Le projet vise à accueillir des contributeurs de tous niveaux, du débutant à l’expert, et fournit des guides dédiés
FAQ
- uv se prononce « u-v »
- Le style est fixé en minuscules :
uv
Contexte technique et remerciements (Acknowledgements)
- L’algorithme de résolution des dépendances utilise PubGrub
- L’implémentation Git repose sur Cargo
- La stratégie d’optimisation s’inspire largement d’outils modernes de packaging comme pnpm, Orogene, Bun, Posy
Licence
- Utilisable au choix sous MIT ou Apache-2.0
- Le code contribué est également proposé sous la même double licence
1 commentaires
Avis Hacker News
Il y a encore quelques mois, je pensais que je n’utiliserais jamais uv, parce que j’étais déjà habitué à venv et pip et que je ne voyais pas l’intérêt d’un autre outil. Mais récemment, sur un serveur partagé sans accès root, toutes sortes de paquets et de drivers étaient cassés et j’avais besoin de pytorch ; cette expérience m’a fait basculer complètement vers uv. Avec pip, tout prenait longtemps, le cache occupait énormément d’espace et il était difficile à déplacer. En passant à uv, tout a tellement bien fonctionné que j’en suis ravi. Si vous hésitez encore, essayez-le au moins 5 minutes
uv venvLa première fois que j’ai utilisé uv, c’était tellement rapide par rapport à pip que j’ai cru qu’il y avait eu une erreur ou que ça n’avait pas vraiment marché
Je pense que uv et ruff sont de superbes contre-exemples à l’idée qu’il ne faut « jamais réinventer la roue ». Quand l’objectif est clair, on peut parfois produire quelque chose de très largement supérieur à l’existant
Sur les petites machines ou les systèmes peu puissants (comme Windows sur une AWS T2.micro), uv tente trop de téléchargements simultanés et provoque des timeouts. Le problème se résout en limitant le nombre de téléchargements concurrents à 1 ou 2 avec la variable d’environnement UV_CONCURRENT_DOWNLOADS. Je trouve le réglage par défaut de uv trop agressif ; ce serait bien qu’il s’améliore en ajustant automatiquement selon le serveur, par exemple en se basant sur la vitesse de téléchargement
J’essaie uv récemment sur mon portable à titre personnel, et comme j’étais habitué à pip, la vitesse perçue me paraît tellement invraisemblable que plusieurs fois je me suis demandé si ça s’était bien exécuté
J’adore la commande
uv add <mydependencies> --script mycoolscript.py, et avec#!/usr/bin/env -S uv runtout en haut, on peut exécuter immédiatement un script Python, donc c’est devenu un outil extrêmement utile pour moiuv add --scriptet un simpleuv addsont différents. Et il y a bien d’autres fonctions utiles dans la documentation officielle, commerun --withou le support de PEP723, donc je recommande d’y jeter un œil guide officielJ’avais essayé uv il y a quelque temps et j’ai été surpris par sa vitesse écrasante et sa simplicité d’utilisation. À ce stade, il n’y a quasiment plus de raison d’utiliser pip, et si on ne fait que du Python, on n’a même plus besoin de conda
J’adore vraiment UV. J’aime aussi Ruff de l’équipe Astral, au point d’avoir remplacé entièrement pylint + Black par Ruff pour le linting et le formatage. Dans mon cas, le temps de lint est passé de 90 secondes à moins de 1,5 seconde, ce qui m’a sidéré
Récemment, j’aime beaucoup utiliser le motif suivant pour exécuter de petits scripts autonomes
#!/usr/bin/env uvx, parce qu’aujourd’hui je dois la rechercher à chaque foisJ’en suis totalement satisfait et je n’ai aucune envie de revenir à pip/twine/requirements.txt. Plusieurs projets stockaient des wheels partagées sur un GitLab interne, et les 10 lignes de YAML d’avant peuvent maintenant être remplacées par deux lignes : "uv build" et "uv publish". C’est pratique pour récupérer les dépendances et voir d’un coup d’œil les dépendances principales, sans avoir tout mélanger dans un requirements.txt