Aller au contenu principal

Bonnes pratiques Python

Sécuriser son environnement et ses dépendances avec pipx

astuce

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 ?

  1. 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.
  2. Sécurité des paquets : Certains paquets peuvent contenir du code malveillant ou vulnérable. Il est important de limiter leur portée.
  3. 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.

Mauvaise pratique

Installer des paquets directement avec pip dans l’environnement système peut provoquer des conflits ou exposer l’ordinateur à des paquets malveillants.

Mauvaise pratique

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.

astuce

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 commande
  • black : formateur de code Python
  • pyright : analyseur statique de code Python
  • cookiecutter : 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 :

  1. Isolation : Chaque projet peut avoir ses propres dépendances sans interférer avec d’autres projets.
  2. Gestion des versions : Vous pouvez installer des versions spécifiques de bibliothèques pour chaque projet.
  3. Facilité de déploiement : Vous pouvez facilement reproduire l’environnement de développement sur un serveur ou une autre machine.
  4. 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èrevenvpippipx
Rôle principalCréer un environnement virtuel isoléInstaller des paquets PythonInstaller et exécuter des outils Python CLI isolés
Type d’outilOutil de gestion d’environnementGestionnaire de paquetsGestionnaire d’outils CLI Python
Installation par défaut avec PythonOui (depuis Python 3.3)Oui (depuis Python 3.4)Non (doit être installé séparément)
Crée un environnement virtuel ?OuiNonOui (automatiquement pour chaque outil)
Utilisation typiqueIsoler les dépendances d’un projetInstaller des bibliothèques dans un projetInstaller 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 principaleProjets PythonBibliothèques et dépendancesOutils en ligne de commande (CLI) écrits en Python
Exemples d’utilisationpython -m venv monenvpip install requestspipx 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 projetRisque de polluer le système si mal utiliséIsole chaque outil pour éviter les conflits

Bonnes pratiques avec pipx

  1. Installer pipx : Utilisez python3 -m pip install --user pipx pour l’installer.
  2. Ajouter pipx au PATH : Exécutez python3 -m pipx ensurepath pour ajouter pipx à votre chemin d’exécution.
  3. Installer des outils : Utilisez pipx install nom_de_l_outil pour installer des outils Python.
  4. Mettre à jour des outils : Utilisez pipx upgrade nom_de_l_outil pour mettre à jour un outil installé.
  5. Supprimer des outils : Utilisez pipx uninstall nom_de_l_outil pour désinstaller un outil.
  6. Lister les outils installés : Utilisez pipx list pour voir tous les outils installés.
  7. 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é

  1. Utiliser un environnement virtuel (venv) pour chaque projet.
  2. Analyser les dépendances avec des outils comme safety ou pip-audit.
  3. Figer les versions des dépendances dans un fichier requirements.txt.
  4. Éviter d’exécuter du code téléchargé sans le lire.
  5. 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 :

  1. Installer pipx (si ce n’est pas encore fait) :

    python3 -m pip install --user pipx
    python3 -m pipx ensurepath
  2. Fermer et rouvrir le terminal pour que le chemin soit pris en compte.

  3. Installer un outil en toute sécurité, par exemple httpie :

    pipx install httpie
  4. Vérifier que l’outil est installé et accessible :

    http --version
  5. Mettre à jour un outil installé :

    pipx upgrade httpie
  6. Supprimer proprement un outil :

    pipx uninstall httpie
  7. Lister tous les outils installés avec pipx :

    pipx list
  8. Installer un outil depuis une URL GitHub (ex. cookiecutter) :

    pipx install cookiecutter
  9. Utiliser un outil sans l’installer (exécution temporaire) :

    pipx run pycowsay "Sécuriser son Python"
  10. Vérifier l’environnement virtuel utilisé :

pipx environment

Test de mémorisation/compréhension


Quel outil permet d’installer un outil Python dans un environnement isolé ?


Quel est l’intérêt principal de pipx ?


Quelle commande permet de voir les outils installés avec pipx ?


Quelle commande permet d'installer pipx ?


Quel outil est adapté pour formater du code Python ?


Quelle commande permet d’exécuter un outil temporairement avec pipx ?


Quel outil permet d’analyser les vulnérabilités dans les dépendances ?


Quel est le bon usage de pip ?


Pourquoi éviter d’installer des paquets avec sudo pip ?


Quel fichier permet de figer les versions des dépendances ?


Quel outil est spécifiquement recommandé pour installer des outils en ligne de commande Python ?


Quelle commande permet d’ajouter automatiquement le chemin de pipx à votre système ?


Quel est le comportement par défaut de pip lors de l’installation d’un paquet ?


Quelle commande permet d'exécuter un outil Python via pipx sans l’installer ?


Parmi les affirmations suivantes, laquelle est vraie concernant pipx ?


Quel est le principal risque d’utiliser pip avec sudo ?


Quelle commande permet de supprimer un outil installé avec pipx ?


Quel est l’intérêt principal d’utiliser un environnement virtuel avec venv ?


Quel outil mentionné dans le cours permet de détecter les vulnérabilités dans les bibliothèques installées ?


Quel fichier permet de figer les versions exactes des bibliothèques utilisées dans un projet ?



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 avec pipx
  • 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

  1. Ouvrez votre terminal.
  2. Installez pyright avec pipx :
    pipx install pyright
  3. Vérifiez que l’installation s’est bien déroulée :
    pyright --version
info

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

  1. Dans un nouveau dossier (par exemple tp-pipx-pyright), créez un fichier nommé test.py.
  2. Copiez-collez le code suivant dans ce fichier :
def addition(a: int, b: int) -> int:
return a + b

resultat = addition("5", 2)
print(resultat)
  1. Enregistrez le fichier.
info

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

  1. Dans le terminal, placez-vous dans le dossier contenant le fichier test.py.
  2. Exécutez la commande suivante :
    pyright test.py
info

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

  1. Désinstallez pyright avec la commande :

    pipx uninstall pyright
  2. Vérifiez que l’outil n’est plus accessible :

    pyright
info

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.