python -m pip download package -d downloads/
Télécharger uniquement une wheel :
python -m pip download --only-binary=:all: package -d downloads/
Afficher les informations :
python -m pip index versions package
Installer avec davantage de détails :
python -m pip install -vvv package
Contenu
68. Hashes
Un fichier de dépendances peut inclure des hashes :
requests==2.32.3 \
--hash=sha256:...
Installation stricte :
python -m pip install --require-hashes -r requirements.txt
Cela permet de vérifier que les fichiers téléchargés correspondent exactement aux artefacts attendus.
Partie 20 — Workflow professionnel recommandé
69. Workflow minimal avec venv et pip
Windows
mkdir mon-projet cd mon-projet py -3.12 -m venv .venv .venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install fastapi uvicorn python -m pip freeze > requirements.txt
Pour recréer :
py -3.12 -m venv .venv .venv\Scripts\Activate.ps1 python -m pip install -r requirements.txt
70. Workflow recommandé avec uv
uv init mon-projet cd mon-projet uv python pin 3.12 uv add fastapi uvicorn uv add --dev pytest ruff uv run pytest uv run uvicorn main:app --reload
Fichiers à versionner :
pyproject.toml uv.lock .python-version src/ tests/
À ignorer :
.venv/ __pycache__/ .pytest_cache/ .ruff_cache/
71. Exemple de projet complet
mon-api/
├── .gitignore
├── .python-version
├── pyproject.toml
├── uv.lock
├── src/
│ └── mon_api/
│ ├── __init__.py
│ └── main.py
└── tests/
└── test_main.py
pyproject.toml :
[project]
name = "mon-api"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = [
"fastapi>=0.115,<1",
"uvicorn[standard]>=0.34,<1",
]
[dependency-groups]
dev = [
"pytest>=8,<9",
"ruff>=0.12,<1",
]
Commandes :
uv sync uv run uvicorn mon_api.main:app --reload uv run pytest uv run ruff check .
Partie 21 — Procédure universelle de diagnostic
72. Étape 1 : identifier le Python
python --version python -c "import sys; print(sys.executable)"
Sous Windows :
py --list where python
Sous Linux :
type -a python type -a python3
73. Étape 2 : identifier pip
python -m pip --version
Comparer son chemin avec :
python -c "import sys; print(sys.executable)"
74. Étape 3 : identifier l’environnement
python -c "import sys; print('prefix:', sys.prefix); print('base:', sys.base_prefix); print('venv:', sys.prefix != sys.base_prefix)"
75. Étape 4 : vérifier la compatibilité
python -m pip index versions nom-du-paquet python -m pip install -vvv nom-du-paquet
Lire notamment :
Requires-Python;- les versions candidates ignorées ;
- les wheels rejetées ;
- les conflits de dépendances.
76. Étape 5 : tester la disponibilité d’une wheel
python -m pip install --only-binary=:all: nom-du-paquet
Si cela échoue mais que l’installation normale tente de compiler, aucune wheel compatible n’est probablement disponible.
python -m pip debug --verbose
Comparer avec le fichier téléchargé :
cp312-cp312-win_amd64
78. Étape 7 : repartir proprement
deactivate
Supprimer .venv, puis :
python-version-voulue -m venv .venv
Réinstaller depuis le fichier de dépendances.
Partie 22 — Les règles à retenir
79. Les dix règles essentielles
Règle 1
Un environnement virtuel ne télécharge pas automatiquement une autre version de Python.
Il utilise le Python qui le crée.
Règle 2
Toujours préférer :
python -m pip
à :
pip
Règle 3
Un environnement virtuel par projet.
Règle 4
Ne pas installer les dépendances de projet dans le Python global.
Règle 5
Ne pas utiliser sudo pip install.
Règle 6
Une wheel doit correspondre :
- à l’implémentation Python ;
- à la version Python ;
- à l’ABI ;
- au système ;
- à l’architecture.
Règle 7
Une compilation déclenchée par pip signifie souvent qu’aucune wheel compatible n’a été trouvée.
Règle 8
Ne pas copier .venv entre machines.
Le recréer à partir des métadonnées.
Règle 9
Versionner :
pyproject.toml fichier de lock .python-version
mais pas :
.venv
Règle 10
Pour un nouveau projet, uv constitue aujourd’hui une solution très cohérente pour gérer simultanément Python, les environnements, les dépendances et le verrouillage.
Partie 23 — Arbre de décision rapide
Je veux commencer un projet
Ai-je une version Python imposée ?
│
├── Oui
│ └── Installer ou sélectionner cette version
│
└── Non
└── Choisir une version stable supportée par les bibliothèques
Puis :
Projet moderne ? │ ├── Oui → uv + pyproject.toml + uv.lock │ └── Non → venv + pip + requirements.txt
Une installation échoue
L’erreur parle de Requires-Python ?
│
├── Oui → mauvaise version de Python
│
└── Non
│
├── ResolutionImpossible ?
│ └── conflit de versions
│
├── Failed building wheel ?
│ └── compilation native ou absence de wheel
│
├── unsupported wheel ?
│ └── mauvais Python, OS ou architecture
│
└── ModuleNotFoundError après installation ?
└── pip et python ne visent pas le même environnement
Commande de diagnostic finale
Sous Windows PowerShell :
Write-Host "=== Python ==="
python --version
python -c "import sys, platform; print('Executable:', sys.executable); print('Prefix:', sys.prefix); print('Base prefix:', sys.base_prefix); print('Virtual env:', sys.prefix != sys.base_prefix); print('Implementation:', platform.python_implementation()); print('Machine:', platform.machine())"
Write-Host "`n=== pip ==="
python -m pip --version
Write-Host "`n=== Paths ==="
where.exe python
where.exe pip
Write-Host "`n=== Packages ==="
python -m pip list
Sous Linux ou macOS :
echo "=== Python ==="
python --version
python -c "import sys, platform; print('Executable:', sys.executable); print('Prefix:', sys.prefix); print('Base prefix:', sys.base_prefix); print('Virtual env:', sys.prefix != sys.base_prefix); print('Implementation:', platform.python_implementation()); print('Machine:', platform.machine())"
echo
echo "=== pip ==="
python -m pip --version
echo
echo "=== Paths ==="
type -a python
type -a pip
echo
echo "=== Packages ==="
python -m pip list
La sortie de ces commandes permet de résoudre la majorité des problèmes de gestion de paquets Python.