Bonnes pratiques Python
Sécuriser son environnement et ses dépendances avec pipx
pipx = venv + pip
Notions théoriques
Développer en Python implique souvent d’installer des bibliothèques tierces pour enrichir ses projets.
Cependant, ces installations peuvent présenter des risques si elles ne sont pas bien maîtrisées.
Pourquoi sécuriser son environnement Python ?
- Isolation des projets : Chaque projet peut nécessiter des versions différentes de bibliothèques. Installer toutes ces versions dans le même environnement peut causer des conflits.
- Sécurité des paquets : Certains paquets peuvent contenir du code malveillant ou vulnérable. Il est important de limiter leur portée.
- Préservation du système : Installer des paquets avec les droits administrateur peut modifier des fichiers sensibles du système.
Qu'est-ce que pip ?
pip
est le gestionnaire de paquets officiel pour Python.
pip
permet d’installer, de mettre à jour et de désinstaller des bibliothèques Python.
pip
est souvent utilisé pour gérer les dépendances d’un projet Python.
Installer des paquets directement avec pip
dans l’environnement système peut provoquer des conflits ou exposer l’ordinateur à des paquets malveillants.
L’installation de paquets avec sudo pip
peut corrompre le système en modifiant des fichiers critiques.
Qu'est-ce que pipx ?
pipx
est un outil qui permet d’installer et d’exécuter des applications Python dans des environnements isolés.
Contrairement à
pip
,pipx
n’installe pas les paquets dans le système global, mais crée un environnement virtuel pour chaque outil.
pipx
est particulièrement utile pour les outils en ligne de commande (CLI) écrits en Python, car il permet de les installer sans polluer l’environnement global.
Avantages de pipx :
- Isolation automatique dans un environnement virtuel
- Installation globale des outils sans polluer le système
- Mise à jour facile des outils installés
- Suppression simple et propre
Exemples d’outils à installer avec pipx :
httpie
: outil de requêtes HTTP en ligne de commandeblack
: formateur de code Pythonpyright
: analyseur statique de code Pythoncookiecutter
: générateur de projets
Qu'est-ce qu'un environnement virtuel ?
Un environnement virtuel est un espace isolé dans lequel vous pouvez installer des paquets Python sans affecter le reste de votre système.
Cela permet d’éviter les conflits entre différentes versions de bibliothèques et de garder votre système propre.
Un environnement virtuel est créé à l’aide de la commande :
python -m venv nom_de_l_environnement
.
Une fois créé, vous devez l’activer pour l’utiliser :
source nom_de_l_environnement/bin/activate
sur Linux/Mac- ou
nom_de_l_environnement\Scripts\activate
sur Windows.
Pourquoi utiliser un environnement virtuel ?
L’utilisation d’un environnement virtuel est essentielle pour plusieurs raisons :
- Isolation : Chaque projet peut avoir ses propres dépendances sans interférer avec d’autres projets.
- Gestion des versions : Vous pouvez installer des versions spécifiques de bibliothèques pour chaque projet.
- Facilité de déploiement : Vous pouvez facilement reproduire l’environnement de développement sur un serveur ou une autre machine.
- Sécurité : En isolant les dépendances, vous réduisez le risque d’introduire des vulnérabilités dans votre système.
Comparaison venv
, pip
et pipx
Critère | venv | pip | pipx |
---|---|---|---|
Rôle principal | Créer un environnement virtuel isolé | Installer des paquets Python | Installer et exécuter des outils Python CLI isolés |
Type d’outil | Outil de gestion d’environnement | Gestionnaire de paquets | Gestionnaire d’outils CLI Python |
Installation par défaut avec Python | Oui (depuis Python 3.3) | Oui (depuis Python 3.4) | Non (doit être installé séparément) |
Crée un environnement virtuel ? | Oui | Non | Oui (automatiquement pour chaque outil) |
Utilisation typique | Isoler les dépendances d’un projet | Installer des bibliothèques dans un projet | Installer des outils CLI de manière globale et isolée |
Installation dans l’environnement global ? | Non (environnement local au projet) | Oui (par défaut, sauf si dans un venv) | Non (chaque outil a son propre venv) |
Cible principale | Projets Python | Bibliothèques et dépendances | Outils en ligne de commande (CLI) écrits en Python |
Exemples d’utilisation | python -m venv monenv | pip install requests | pipx install black |
Peut être combiné avec les autres ? | Oui (souvent utilisé avec pip ) | Oui (dans ou hors d’un venv ) | Non nécessairement, pipx gère l’isolation automatiquement |
Sécurité | Isole les dépendances d’un projet | Risque de polluer le système si mal utilisé | Isole chaque outil pour éviter les conflits |
Bonnes pratiques avec pipx
- Installer pipx : Utilisez
python3 -m pip install --user pipx
pour l’installer. - Ajouter pipx au PATH : Exécutez
python3 -m pipx ensurepath
pour ajouter pipx à votre chemin d’exécution. - Installer des outils : Utilisez
pipx install nom_de_l_outil
pour installer des outils Python. - Mettre à jour des outils : Utilisez
pipx upgrade nom_de_l_outil
pour mettre à jour un outil installé. - Supprimer des outils : Utilisez
pipx uninstall nom_de_l_outil
pour désinstaller un outil. - Lister les outils installés : Utilisez
pipx list
pour voir tous les outils installés. - Exécuter un outil temporairement : Utilisez
pipx run nom_de_l_outil
pour exécuter un outil sans l’installer.
Autres bonnes pratiques de développement sécurisé
- Utiliser un environnement virtuel (
venv
) pour chaque projet. - Analyser les dépendances avec des outils comme
safety
oupip-audit
. - Figer les versions des dépendances dans un fichier
requirements.txt
. - Éviter d’exécuter du code téléchargé sans le lire.
- Vérifier la source des paquets (ne pas se fier uniquement au nom du paquet).
Exemple pratique
Il est possible de sécuriser l’installation d’un outil Python en utilisant pipx
.
Étapes :
-
Installer
pipx
(si ce n’est pas encore fait) :python3 -m pip install --user pipx
python3 -m pipx ensurepath -
Fermer et rouvrir le terminal pour que le chemin soit pris en compte.
-
Installer un outil en toute sécurité, par exemple
httpie
:pipx install httpie
-
Vérifier que l’outil est installé et accessible :
http --version
-
Mettre à jour un outil installé :
pipx upgrade httpie
-
Supprimer proprement un outil :
pipx uninstall httpie
-
Lister tous les outils installés avec pipx :
pipx list
-
Installer un outil depuis une URL GitHub (ex. cookiecutter) :
pipx install cookiecutter
-
Utiliser un outil sans l’installer (exécution temporaire) :
pipx run pycowsay "Sécuriser son Python"
-
Vérifier l’environnement virtuel utilisé :
pipx environment
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif du TP
Dans ce TP, vous allez :
- Installer et utiliser un outil CLI Python utile pour l’analyse de code (
pyright
) - Comparer son installation avec
pip
et avecpipx
- Identifier les avantages de l’isolation avec
pipx
- Créer un mini script Python pour générer volontairement une erreur de type
- Utiliser
pyright
pour détecter cette erreur sans polluer votre environnement global
Étape 1 : Installer pyright avec pipx
- Ouvrez votre terminal.
- Installez
pyright
avecpipx
:pipx install pyright
- Vérifiez que l’installation s’est bien déroulée :
pyright --version
Pour installer pyright
, la commande pipx install pyright
crée automatiquement un environnement virtuel isolé dans lequel l’outil est installé. Cela évite toute pollution de l’environnement Python global.
Après l’installation, la commande pyright --version
doit afficher un numéro de version, ce qui confirme que l’outil est bien installé et accessible depuis le terminal.
Exemple de sortie :
pyright 1.1.350
Si la commande pyright
n’est pas reconnue, il est possible que le chemin de pipx
ne soit pas encore dans votre PATH
. Dans ce cas, exécutez :
python3 -m pipx ensurepath
Puis redémarrez le terminal.
Étape 2 : Créer un fichier Python avec une erreur de type
- Dans un nouveau dossier (par exemple
tp-pipx-pyright
), créez un fichier nommétest.py
. - Copiez-collez le code suivant dans ce fichier :
def addition(a: int, b: int) -> int:
return a + b
resultat = addition("5", 2)
print(resultat)
- Enregistrez le fichier.
Le fichier test.py
contient une erreur de type volontaire. La fonction addition
attend deux entiers (int
), mais on lui passe une chaîne de caractères "5"
et un entier 2
.
Python n’affichera pas d’erreur à l’exécution (car c’est un langage dynamique), mais un outil d’analyse statique comme pyright
détectera cette incohérence de type avant m ême l’exécution.
Le fichier doit ressembler à ceci :
def addition(a: int, b: int) -> int:
return a + b
resultat = addition("5", 2)
print(resultat)
Placez ce fichier dans un dossier dédié pour éviter toute confusion avec d’autres projets.
Étape 3 : Analyser le fichier avec pyright
- Dans le terminal, placez-vous dans le dossier contenant le fichier
test.py
. - Exécutez la commande suivante :
pyright test.py
La commande pyright test.py
analyse statiquement le fichier Python.
Voici un exemple de sortie attendue :
/chemin/vers/test.py
4:20 - error: Argument of type "Literal['5']" cannot be assigned to parameter "a" of type "int" in function "addition"
"Literal['5']" is incompatible with "int" (reportGeneralTypeIssues)
1 error, 0 warnings, 0 informations
Pyright détecte que la chaîne "5"
ne correspond pas au type int
attendu. Cela montre l’intérêt de l’analyse statique pour détecter des erreurs avant l’exécution.
Cette vérification est possible sans avoir à installer pyright
dans un environnement global ou dans un projet.
Étape 4 : Supprimer proprement l’outil installé avec pipx
-
Désinstallez
pyright
avec la commande :pipx uninstall pyright
-
Vérifiez que l’outil n’est plus accessible :
pyright
La commande pipx uninstall pyright
supprime à la fois l’outil et l’environnement virtuel associé, de manière propre.
Après la désinstallation, la commande pyright
ne devrait plus être reconnue :
Command 'pyright' not found
Cela montre que pipx
permet une gestion propre et isolée des outils CLI, sans laisser de traces dans le système global.