Comprendre et modifier les chemins d'importation avec sys.path en Python

1. À propos de sys.path

Lorsque nous utilisons l'instruction import, Python doit rechercher le module ou le package demandé. La variable sys.path du module sys contient une liste de chemins utilisés par Python pour rechercher les modules importables.

sys.path est une liste Python. Ses éléments correspondent principalement à des dossiers dans lesquels Python peut rechercher des modules et des packages.

Le programme suivant affiche directement le contenu de sys.path.

Sortie possible :

Le contenu exact de sys.path dépend notamment de l'installation de Python, du système d'exploitation, de l'environnement virtuel et de la manière dont le programme a été lancé.

2. Afficher les chemins d'importation avec sys.path

Comme sys.path est une liste, nous pouvons la parcourir avec une boucle for. Cette méthode permet d'afficher les chemins de manière plus lisible.

Le programme suivant affiche chaque chemin sur une ligne différente.

Sortie possible :

Nous pouvons également utiliser enumerate() pour afficher l'indice de chaque chemin dans sys.path.

Sortie possible :

L'ordre des chemins est important, car il intervient dans la recherche des modules par Python.

3. Comprendre comment Python recherche un module

Lorsque nous utilisons une instruction comme import calcul, Python utilise son système d'importation pour rechercher le module demandé. Pour les modules présents sur le système de fichiers, les chemins contenus dans sys.path jouent un rôle essentiel.

Supposons qu'un fichier calcul.py se trouve dans un emplacement accessible par Python. Nous pouvons alors l'importer normalement.

Sortie possible :

Si Python ne trouve pas le module demandé, il déclenche généralement une exception ModuleNotFoundError.

Le programme suivant tente volontairement d'importer un module inexistant.

Sortie :

4. Ajouter un chemin avec sys.path.append()

La méthode sys.path.append() permet d'ajouter un nouveau chemin à la fin de la liste sys.path. Python pourra alors rechercher des modules dans ce dossier pendant l'exécution du programme courant.

Le programme suivant ajoute le dossier C:\mes_modules à la fin de sys.path.

Sortie :

Supposons maintenant que C:\mes_modules contienne un fichier nommé calcul.py. Après avoir ajouté le dossier, nous pouvons importer ce module.

Sortie possible :

L'ajout effectué avec append() n'est pas une modification permanente de l'installation de Python. Il concerne le processus Python en cours.

5. Ajouter un chemin avec sys.path.insert()

La méthode sys.path.insert() permet d'ajouter un chemin à une position précise de la liste. Par exemple, sys.path.insert(0, chemin) place le chemin en première position.

Le programme suivant ajoute le dossier C:\mes_modules au début de sys.path.

Sortie :

La différence entre append() et insert() réside donc principalement dans la position du chemin ajouté.

  • sys.path.append(chemin) ajoute le chemin à la fin.
  • sys.path.insert(0, chemin) ajoute le chemin au début.

Le programme suivant illustre cette différence.

Sortie :

Un chemin placé au début de sys.path peut être consulté avant d'autres emplacements lors de certaines recherches de modules. Il faut donc éviter d'y placer inutilement des dossiers contenant des modules portant le même nom que d'autres modules du projet.

6. Supprimer un chemin de sys.path

Puisque sys.path est une liste, nous pouvons utiliser la méthode remove() pour supprimer un chemin.

Le programme suivant ajoute un chemin puis le supprime.

Sortie :

La méthode remove() provoque une exception ValueError si le chemin demandé n'est pas présent. Nous pouvons donc vérifier sa présence avant de le supprimer.

Sortie possible :

7. Vérifier la présence d'un chemin dans sys.path

L'opérateur in permet de vérifier si un chemin est présent dans sys.path. Cette vérification est utile avant d'ajouter ou de supprimer un chemin.

Le programme suivant ajoute un dossier uniquement s'il n'est pas déjà présent dans la liste.

Sortie possible :

Nous pouvons ensuite vérifier que le chemin appartient bien à sys.path.

Sortie :

8. Utiliser pathlib avec sys.path

Le module pathlib facilite la construction des chemins. Nous pouvons donc construire un chemin avec Path, puis le convertir en chaîne avec str() avant de l'ajouter à sys.path.

Le programme suivant ajoute un dossier mes_modules situé dans le dossier personnel de l'utilisateur.

Sortie possible sous Windows :

Nous pouvons également construire un chemin relatif au dossier contenant le script Python grâce à __file__.

Supposons qu'un dossier modules se trouve à côté du script courant. Le programme suivant construit son chemin puis l'ajoute à sys.path.

Sortie possible :

Cette solution évite d'écrire directement dans le programme un chemin absolu dépendant d'un ordinateur particulier.

9. Bonnes pratiques avec sys.path

La modification de sys.path peut être utile dans certains scripts ou projets, mais elle doit être utilisée avec précaution. L'ordre des chemins peut modifier le module sélectionné lorsqu'il existe plusieurs modules portant le même nom.

Pour connaître le fichier correspondant à un module importé, nous pouvons consulter son attribut __file__ lorsqu'il est disponible.

Le programme suivant affiche l'emplacement du module pathlib.

Sortie possible :

Dans un projet important, il est généralement préférable d'organiser correctement les fichiers en modules et packages plutôt que de modifier continuellement sys.path.

Il est également recommandé d'éviter l'ajout de dossiers non fiables au début de sys.path, car un module présent dans ces dossiers pourrait être importé à la place du module attendu.

10. À retenir !

La variable sys.path du module sys contient une liste de chemins utilisés par le système d'importation de Python pour rechercher notamment les modules et les packages.

  • sys.path est une liste de chemins de recherche.
  • Son contenu dépend de l'installation et de l'environnement Python.
  • L'ordre des chemins peut influencer la recherche des modules.
  • sys.path.append() ajoute un chemin à la fin de la liste.
  • sys.path.insert() permet d'ajouter un chemin à une position déterminée.
  • sys.path.insert(0, chemin) place le chemin au début de la liste.
  • sys.path.remove() permet de supprimer un chemin.
  • L'opérateur in permet de vérifier la présence d'un chemin.
  • pathlib.Path facilite la construction des chemins avant leur ajout à sys.path.
  • Pour les projets importants, une bonne organisation en packages Python est généralement préférable à des modifications répétées de sys.path.

Le programme suivant rassemble les principales opérations : construire un chemin, vérifier sa présence, l'ajouter à sys.path puis afficher les différents chemins d'importation.

Sortie possible :

 


 


Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *