🐍 Python venv - Environnements Virtuels
📋 Table des Matières
- Introduction
- Pourquoi utiliser venv ?
- Installation
- Création d'un environnement virtuel
- Activation et Désactivation
- Gestion des dépendances
- Bonnes pratiques
- Commandes utiles
- Troubleshooting
Introduction
venv est un module Python intégré qui permet de créer des environnements virtuels isolés. Il est inclus par défaut dans Python 3.3 et versions ultérieures.
Pourquoi utiliser venv ?
Avantages
- ✅ Isolation des dépendances : Chaque projet a ses propres packages
- ✅ Évite les conflits de versions : Python 2 vs Python 3, différentes versions de packages
- ✅ Reproductibilité : Facilite le partage et le déploiement
- ✅ Pas de pollution globale : Installation système reste propre
- ✅ Gestion de permissions : Pas besoin de sudo pour installer des packages
Cas d'usage
Projet A : Django 3.2 + Python 3.8
Projet B : Django 4.2 + Python 3.11
→ Sans venv, impossible d'avoir les deux versions simultanémentInstallation
Vérifier si venv est disponible
python3 --version
python3 -m venv --helpInstallation si nécessaire
Ubuntu/Debian
sudo apt update
sudo apt install python3-venvFedora/RHEL/CentOS
sudo dnf install python3-virtualenv
# ou
sudo yum install python3-virtualenvmacOS
# venv est inclus avec Python 3
# Si besoin, installer via Homebrew
brew install python3Windows
# venv est inclus avec Python 3
# Télécharger depuis python.org si nécessaireCréation d'un environnement virtuel
Syntaxe de base
python3 -m venv <nom_environnement>Exemples pratiques
# Créer un environnement nommé "venv"
python3 -m venv venv
# Créer un environnement nommé "myenv"
python3 -m venv myenv
# Créer avec une version spécifique de Python
python3.11 -m venv venv311
# Créer dans un dossier spécifique
python3 -m venv /chemin/vers/mon_projet/venvOptions avancées
# Sans pip (installer manuellement plus tard)
python3 -m venv --without-pip venv
# Avec accès aux packages système
python3 -m venv --system-site-packages venv
# Mise à niveau des packages de base
python3 -m venv --upgrade venv
# Avec des prompts personnalisés
python3 -m venv --prompt="MonProjet" venvActivation et Désactivation
Linux / macOS
Activation
# Bash/Zsh
source venv/bin/activate
# Fish
source venv/bin/activate.fish
# Csh
source venv/bin/activate.cshVérification
# Le prompt change pour indiquer l'environnement actif
(venv) user@machine:~/project$
# Vérifier le chemin Python
which python
# Output: /chemin/vers/projet/venv/bin/pythonDésactivation
deactivateWindows
Activation
# PowerShell
.\venv\Scripts\Activate.ps1
# CMD
.\venv\Scripts\activate.batSi erreur de politique d'exécution (PowerShell)
# Autoriser temporairement
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
# Puis activer
.\venv\Scripts\Activate.ps1Désactivation
deactivateGestion des dépendances
Installer des packages
# Activer l'environnement d'abord
source venv/bin/activate
# Installer un package
pip install requests
# Installer une version spécifique
pip install django==4.2.0
# Installer plusieurs packages
pip install flask sqlalchemy pandasFichier requirements.txt
Créer un fichier requirements.txt
# Exporter les dépendances installées
pip freeze > requirements.txtExemple de requirements.txt
Django==4.2.7
requests==2.31.0
python-dotenv==1.0.0
psycopg2-binary==2.9.9
celery==5.3.4Installer depuis requirements.txt
pip install -r requirements.txtMise à jour des packages
# Mettre à jour un package
pip install --upgrade requests
# Mettre à jour tous les packages
pip list --outdated
pip install --upgrade <package_name>Bonnes pratiques
1. Nommage de l'environnement
# Recommandé : utiliser "venv" ou ".venv"
python3 -m venv venv
python3 -m venv .venv # Caché sur Linux/macOS2. Fichier .gitignore
Toujours exclure venv de Git !
# .gitignore
venv/
.venv/
env/
ENV/
*.pyc
__pycache__/
.env3. Documentation du projet
README.md
## Installation
1. Créer l'environnement virtuel
```bash
python3 -m venv venv-
Activer l'environnement
source venv/bin/activate # Linux/macOS .\venv\Scripts\activate # Windows -
Installer les dépendances
pip install -r requirements.txt
### 4. Structure de projet recommandée
mon_projet/ ├── venv/ # Environnement virtuel (non versionné) ├── src/ # Code source │ └── main.py ├── tests/ # Tests ├── requirements.txt # Dépendances ├── .gitignore ├── .env.example # Template de variables d'environnement └── README.md
### 5. Gestion de plusieurs environnements
```bash
# Développement
python3 -m venv venv-dev
pip install -r requirements-dev.txt
# Production
python3 -m venv venv-prod
pip install -r requirements.txt
# Tests
python3 -m venv venv-test
pip install -r requirements-test.txt6. Scripts d'automatisation
setup.sh (Linux/macOS)
#!/bin/bash
echo "🐍 Configuration de l'environnement Python..."
# Créer venv
python3 -m venv venv
# Activer
source venv/bin/activate
# Installer dépendances
pip install --upgrade pip
pip install -r requirements.txt
echo "✅ Environnement prêt !"setup.ps1 (Windows)
Write-Host "🐍 Configuration de l'environnement Python..." -ForegroundColor Green
# Créer venv
python -m venv venv
# Activer
.\venv\Scripts\Activate.ps1
# Installer dépendances
pip install --upgrade pip
pip install -r requirements.txt
Write-Host "✅ Environnement prêt !" -ForegroundColor GreenCommandes utiles
Informations sur l'environnement
# Version de Python utilisée
python --version
# Chemin de l'exécutable Python
which python # Linux/macOS
where python # Windows
# Liste des packages installés
pip list
# Détails d'un package
pip show django
# Packages obsolètes
pip list --outdated
# Vérifier les dépendances
pip checkNettoyage et maintenance
# Désinstaller un package
pip uninstall requests
# Désinstaller tous les packages
pip freeze | xargs pip uninstall -y
# Nettoyer le cache pip
pip cache purge
# Supprimer l'environnement
deactivate
rm -rf venv # Linux/macOS
rmdir /s venv # WindowsExport et import
# Export avec hashes pour la sécurité
pip freeze --all > requirements-full.txt
# Export seulement les dépendances principales
pip list --not-required --format=freeze > requirements.txt
# Import avec vérification des hashes
pip install --require-hashes -r requirements.txtTroubleshooting
Problème : venv n'est pas reconnu
Solution Ubuntu/Debian
sudo apt install python3-venvProblème : Permission denied lors de l'activation (Windows)
Solution PowerShell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserProblème : pip n'est pas disponible dans venv
Solution
# Réinstaller pip dans le venv
python -m ensurepip --upgrade
# ou
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.pyProblème : Mauvaise version de Python dans venv
Solution
# Spécifier la version lors de la création
python3.11 -m venv venv
# Ou utiliser pyenv pour gérer plusieurs versions
pyenv local 3.11.0
python -m venv venvProblème : venv trop volumineux
Solution
# Ne pas inclure les packages système
python3 -m venv --without-pip venv
# Nettoyer le cache
pip cache purge
# Utiliser des alternatives légères
pip install pipdeptree # Analyser les dépendancesProblème : Conflits de dépendances
Solution
# Utiliser pip-tools pour gérer les dépendances
pip install pip-tools
# Créer requirements.in
echo "django>=4.0" > requirements.in
# Compiler les dépendances
pip-compile requirements.in
# Installer
pip-sync requirements.txtAlternatives à venv
virtualenv
Plus ancien, plus de fonctionnalités
pip install virtualenv
virtualenv venvconda
Gestion de Python et packages non-Python
conda create -n myenv python=3.11
conda activate myenvpipenv
Combine pip et virtualenv
pip install pipenv
pipenv install django
pipenv shellpoetry
Gestion moderne des dépendances
curl -sSL https://install.python-poetry.org | python3 -
poetry new mon_projet
poetry add djangoRessources
- 📖 Documentation officielle venv (opens in a new tab)
- 📖 Guide pip (opens in a new tab)
- 📖 PEP 405 - Python Virtual Environments (opens in a new tab)