Python uv — Avancé : versions Python, interface pip et installation d'outils

3 min read

Quand les besoins passent de « pourvu que ça tourne » à « tests multi-versions, pipelines rétrocompatibles et outils globaux », uv suit. Cet article vous fait passer du donjon en solo au raid en équipe.

Gestion des versions Python

uv intègre le téléchargement et la gestion de Python — pas besoin d'installer pyenv à part.

# Installer plusieurs versions
uv python install 3.10 3.11 3.12
 
# Fixer la version d'un projet (crée .python-version)
uv python pin 3.11
 
# Créer un venv avec une version précise
uv venv --python 3.12
 
# Exécuter avec une version donnée
uv run --python 3.10 pytest

La première utilisation d'une version déclenche un téléchargement — les suivantes utilisent le cache.

Interface compatible pip

Votre CI, Docker ou scripts utilisent encore pip ? uv fournit un remplacement drop-in :

# Équivalent à pip install -r requirements.txt
uv pip install -r requirements.txt
 
# Compiler les requirements (cross-plateforme, reproductible)
uv pip compile requirements.in --universal -o requirements.txt
 
# Synchroniser l'environnement (strictement depuis le lockfile)
uv pip sync requirements.txt
 
# Créer un venv
uv venv

Passez à uv pip et les paramètres sont quasi identiques, mais la vitesse fait un bond — comme passer du vélo à la moto : même route, expérience totalement différente. Vous voulez moderniser un projet legacy sans tout casser ? Commencez par uv pip, décollage en douceur.

Installation d'outils globaux (uv tool)

Vous ne voulez pas lancer uvx à chaque fois pour des outils que vous utilisez souvent ? Installez-les globalement :

uv tool install ruff
uv tool install httpie
 
# Appel direct ensuite
ruff check .
http https://httpbin.org/get

Mettre à niveau un outil ou tous d'un coup :

uv tool upgrade ruff
uv tool upgrade --all

uv tool install crée des environnements isolés qui n'entrent pas en conflit avec les dépendances du projet. Pour des versions fixées au projet, utilisez toujours uv add --dev.

Lockfile et shebang pour scripts

Vous voulez qu'un script unique soit aussi reproductible ? Vous pouvez verrouiller ses dépendances :

uv lock --script example.py

Cela crée example.py.lock. Quand vous lancez uv run example.py, ce lockfile est utilisé.

Ou le rendre exécutable :

#!/usr/bin/env -S uv run --script
# /// script
# dependencies = ["httpx"]
# ///
 
import httpx
print(httpx.get("https://example.com"))
chmod +x fetch
./fetch

Suite

Avec les capacités avancées en poche, appliquez une checklist pour limiter les risques : 👉 Bonnes pratiques