O09 - Python : environnements virtuels, pip et exécution des scripts

Objectif

Installer proprement des bibliothèques Python sans casser le système (erreur externally-managed-environment), et exécuter les scripts du dossier scripts/.


1. Pourquoi un environnement virtuel ?

Sur Pop!_OS 24.04, Debian 12+ et Arch, pip install en dehors d’un environnement virtuel est refusé (règle PEP 668) : le Python du système appartient au gestionnaire de paquets.

flowchart LR
  SYS["Python du système<br/>(géré par apt / pacman)"] -.-x|"pip install interdit"| PIP["pip"]
  P1["📁 discord-bot/.venv<br/>discord.py 2.x"] --- PY1["python isolé"]
  P2["📁 openfront-bot/.venv<br/>playwright"] --- PY2["python isolé"]

Chaque projet a ses propres bibliothèques, dans ses propres versions → pas de conflit.

2. Mode d’emploi

sudo apt install python3-venv python3-pip     # Pop!_OS / Debian (inclus sur Arch : python)
cd ~/discord-bot
python3 -m venv .venv                          # créer (une fois)
source .venv/bin/activate                      # activer → l'invite affiche (.venv)
pip install -U pip
pip install discord.py python-dotenv           # installer dans le venv
pip freeze > requirements.txt                  # figer les versions
deactivate                                     # sortir
# Sur une autre machine :
python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt

Fish/zsh : source .venv/bin/activate.fish / même commande qu’en bash pour zsh. Windows : .venv\Scripts\Activate.ps1.

BesoinSolution
Une bibliothèque pour un projetvenv + pip
Un outil en ligne de commande pour toi (ex. tldr, ansible)pipx install ansible (crée un venv par outil)
Une bibliothèque très courantePaquet de la distribution : sudo apt install python3-requests / sudo pacman -S python-requests
Gestion moderne et rapideuv (uv venv, uv pip install …, uv run script.py)

Ne jamais forcer avec sudo pip install --break-system-packages sur ton système : tu risques de casser des outils du système qui dépendent de Python.

3. Secrets : le fichier .env

# .env  (à mettre dans .gitignore !)
DISCORD_TOKEN=xxxxxxxxxxxxxxxxxxxx
import os
from dotenv import load_dotenv
 
load_dotenv()                              # lit le fichier .env
jeton_discord = os.getenv("DISCORD_TOKEN")

4. Lancer les scripts du vault

Les scripts de scripts/maths et scripts/reseaux n’utilisent que la bibliothèque standard : pas besoin de venv.

cd "$HOME/obsidian/truc non trier/scripts"
python3 reseaux/calcul_ip.py 192.168.1.200/26
python3 reseaux/vlsm.py 10.10.0.0/22 Production=300 Commerce=120 RH=25
python3 maths/dijkstra.py A F "A-B:4 A-C:2 C-B:1 B-D:5 C-D:8 C-E:10 D-E:2 D-F:6 E-F:2"
chmod +x */*.py */*.sh            # pour les lancer aussi avec ./script

Index complet des scripts : Scripts.

Voir aussi