Menu
Français

Environnements virtuels Python : venv, activation et requirements.txt

Ce qu'est un environnement virtuel, pourquoi chaque vrai projet Python en a besoin d'un, et comment les créer et gérer avec le module venv intégré.

Le problème que les environnements virtuels résolvent

Installe Python, lance pip install requests, et le package atterrit dans un seul endroit global. Ça marche pour un projet. Au troisième projet, ça commence à faire mal :

  • Le projet A a besoin de django==3.2. Le projet B a besoin de django==5.0. Un seul des deux peut avoir sa version installée globalement.
  • Tu veux essayer une nouvelle bibliothèque mais ne veux pas qu'elle pollue tous les autres projets de ta machine.
  • Un coéquipier clone ton repo et n'a aucune idée de quelles versions de quels packages tu dépendais vraiment.

Un environnement virtuel est le correctif. C'est un dossier autonome qui contient un interpréteur Python et son propre répertoire d'installation de bibliothèques. Quand l'environnement est activé, python et pip dans ton terminal pointent à l'intérieur de ce dossier au lieu de ton Python global. Les packages installés là restent là.

Créer un avec venv

venv est livré avec Python 3 — rien à installer. Depuis ton répertoire de projet :

python3 -m venv .venv

Ça crée un dossier .venv/ à côté de ton code. Le nom .venv est une convention quasi universelle ; le point au début le garde hors de la plupart des listings de répertoires, et les éditeurs comme VS Code le détectent automatiquement.

Quand la commande se termine, le dossier contient une installation Python complète (des dizaines de mégaoctets, ce qui est normal) et un pip à lui.

Activer l'environnement

L'activation réécrit le PATH de ton shell pour que python et pip résolvent vers ceux à l'intérieur de .venv/. La commande dépend de ta plateforme :

# macOS / Linux
source .venv/bin/activate

# Windows (Invite de commandes)
.venv\Scripts\activate.bat

# Windows (PowerShell)
.venv\Scripts\Activate.ps1

Ton prompt reçoit un préfixe (.venv) tant que l'environnement est actif — un rappel visuel. Tout pip install que tu lances maintenant n'affecte que ce projet.

Quand tu as fini pour la journée, deactivate restaure l'état précédent :

deactivate

Tu n'as pas besoin de désactiver avant de fermer le terminal — quitter le shell, c'est la même chose.

Installer des packages

Avec l'environnement actif, installe ce dont tu as besoin :

pip install requests
pip install "pandas>=2.0"
pip install --upgrade requests

Vérifie ce qui est installé avec pip list. Retire quelque chose avec pip uninstall requests.

Les packages installés vivent sous .venv/lib/pythonX.Y/site-packages/. Tu n'édites jamais ceux-là à la main — pip gère le répertoire.

Épingler les dépendances avec requirements.txt

Ton projet n'est reproductible que si les autres peuvent installer les mêmes versions que tu as utilisées. La façon la plus simple de capturer ça, c'est requirements.txt :

pip freeze > requirements.txt

pip freeze affiche chaque package installé avec sa version exacte. Commite le fichier dans git.

Quand un collaborateur (ou toi plus tard sur une nouvelle machine) clone le repo :

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Trois commandes et leur environnement correspond au tien.

Une configuration de projet courante

Le workflow complet, du début à la fin :

# Crée le dossier de projet
mkdir my_tool && cd my_tool

# Crée et active le venv
python3 -m venv .venv
source .venv/bin/activate

# Installe les dépendances
pip install requests rich

# Enregistre-les
pip freeze > requirements.txt

# Travaille sur ton code...
echo "import requests; print(requests.__version__)" > main.py
python main.py

# Quand tu as fini
deactivate

Ajoute .venv à ton .gitignore

Ne commite jamais le dossier .venv/. Il est spécifique à la plateforme et reproductible depuis requirements.txt :

# .gitignore
.venv/
__pycache__/
*.pyc

Le commiter gonflerait le repo, casserait sur d'autres machines et fuirait les binaires spécifiques à l'OS que ton interpréteur a.

Quelle version de Python ?

Par défaut, python3 -m venv .venv utilise le python3 que ton shell résout. Si tu as plusieurs Pythons installés (disons 3.12 et 3.13), sois explicite sur lequel :

python3.13 -m venv .venv

Une fois que le venv existe, son interpréteur est épinglé — exécuter python dans le venv activé utilise toujours cette version spécifique, même si ton Python système change.

Quand quelque chose cloche

Quelques symptômes courants et leurs correctifs :

  • pip install marche, mais mes imports échouent. Tu as installé contre le mauvais Python. Active le venv avant pip install, et revérifie avec which python (macOS/Linux) ou where python (Windows).
  • « ModuleNotFoundError » après activation. Le venv a été créé sans certaines bibliothèques, ou le package est installé dans un venv différent. pip list montre ce qui est vraiment dans le courant.
  • Script d'activation introuvable sur Windows. PowerShell peut bloquer les scripts non signés. Lance Set-ExecutionPolicy -Scope CurrentUser RemoteSigned une fois pour autoriser les scripts locaux.
  • « No module named venv ». Sur certaines distributions Linux, venv est un paquet séparé. sudo apt install python3-venv sur Debian/Ubuntu.

Au-delà de venv : Poetry, uv, pipenv

Une fois à l'aise avec venv + pip + requirements.txt, tu croiseras des outils qui enveloppent les mêmes idées avec une meilleure ergonomie :

  • Poetry — gère venvs, dépendances et packaging avec un seul pyproject.toml.
  • uv — un remplacement drop-in très rapide pour pip ; gère aussi les venvs.
  • pipenv — un outil plus ancien qui a popularisé le motif « Pipfile + Pipfile.lock ».

Tous sont bons. Aucun n'est nécessaire pour apprendre. Sois à l'aise avec le workflow venv basique d'abord ; le reste sont des optimisations.

Ce qu'il faut retenir

  • Chaque vrai projet Python a son propre environnement virtuel.
  • Crée-en un avec python3 -m venv .venv, active-le, puis pip install librement.
  • Épingle les dépendances avec pip freeze > requirements.txt et commite ce fichier.
  • Ne commite jamais le dossier .venv/ lui-même.
  • Quand les imports se comportent mal, vérifie d'abord quel Python est actif.

Ensuite : le motif __main__

Avec un projet configuré et des packages installés, un dernier idiome clôt ce chapitre — la garde if __name__ == "__main__". Elle est dans presque chaque fichier Python destiné à être lancé comme script, et c'est le sujet de la prochaine page.

Questions fréquentes

Qu'est-ce qu'un environnement virtuel Python ?

Un environnement virtuel est un dossier autonome avec son propre interpréteur Python et son propre répertoire site-packages pour les bibliothèques installées. L'activer fait pointer python et pip dans ce dossier au lieu de ton Python système, donc les packages que tu installes ne fuient pas entre les projets.

Comment créer un environnement virtuel en Python ?

Lance python3 -m venv .venv dans ton dossier de projet. Ça crée un répertoire .venv avec une installation Python fraîche. Active-le avec source .venv/bin/activate sur macOS/Linux ou .venv\Scripts\activate sur Windows. pip install n'affecte plus que ce projet.

Chaque projet Python devrait-il utiliser un environnement virtuel ?

Pour tout ce qui dépasse un script à usage unique, oui. Ça empêche les conflits de versions entre projets, rend les dépendances explicites dans un requirements.txt (ou pyproject.toml) et laisse les collaborateurs reproduire ta configuration. La configuration d'une minute épargne des heures de débogage de ModuleNotFoundError plus tard.

Quelle est la différence entre venv et virtualenv ?

venv est intégré à Python 3 — rien à installer. virtualenv est un outil tiers qui l'a précédé, avec quelques fonctionnalités en plus (création plus rapide, prise en charge des anciens Pythons). Pour la plupart des projets modernes, venv est le bon défaut ; utilise virtualenv seulement si tu as un besoin spécifique.

Apprendre à coder avec Coddy

COMMENCER