- À propos de sys.path
- Afficher les chemins d'importation avec sys.path
- Comprendre comment Python recherche un module
- Ajouter un chemin avec sys.path.append()
- Ajouter un chemin avec sys.path.insert()
- Supprimer un chemin de sys.path
- Vérifier la présence d'un chemin dans sys.path
- Utiliser pathlib avec sys.path
- Bonnes pratiques avec sys.path
- À retenir !
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.
1 2 3 | import sys print(sys.path) |
Sortie possible :
1 | ['C:\\Users\\dell\\Desktop\\projet', 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python314\\Lib', 'C:\\Users\\dell\\AppData\\Local\\Programs\\Python\\Python314\\Lib\\site-packages'] |
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.
1 2 3 4 | import sys for chemin in sys.path: print(chemin) |
Sortie possible :
1 2 3 4 5 | C:\Users\dell\Desktop\projet C:\Users\dell\AppData\Local\Programs\Python\Python314\python314.zip C:\Users\dell\AppData\Local\Programs\Python\Python314\DLLs C:\Users\dell\AppData\Local\Programs\Python\Python314\Lib C:\Users\dell\AppData\Local\Programs\Python\Python314\Lib\site-packages |
Nous pouvons également utiliser enumerate() pour afficher l'indice de chaque chemin dans sys.path.
1 2 3 4 | import sys for i, chemin in enumerate(sys.path): print(i, ":", chemin) |
Sortie possible :
1 2 3 4 5 | 0 : C:\Users\dell\Desktop\projet 1 : C:\Users\dell\AppData\Local\Programs\Python\Python314\python314.zip 2 : C:\Users\dell\AppData\Local\Programs\Python\Python314\DLLs 3 : C:\Users\dell\AppData\Local\Programs\Python\Python314\Lib 4 : C:\Users\dell\AppData\Local\Programs\Python\Python314\Lib\site-packages |
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.
1 2 3 | import calcul print("Le module calcul a été importé.") |
Sortie possible :
1 | Le module calcul a été importé. |
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.
1 2 3 4 | try: import module_inexistant except ModuleNotFoundError: print("Le module est introuvable.") |
Sortie :
1 | Le module est introuvable. |
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.
1 2 3 4 5 | import sys sys.path.append(r"C:\mes_modules") print(sys.path[-1]) |
Sortie :
1 | C:\mes_modules |
Supposons maintenant que C:\mes_modules contienne un fichier nommé calcul.py. Après avoir ajouté le dossier, nous pouvons importer ce module.
1 2 3 4 5 6 7 | import sys sys.path.append(r"C:\mes_modules") import calcul print("Module calcul importé.") |
Sortie possible :
1 | Module calcul importé. |
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.
1 2 3 4 5 | import sys sys.path.insert(0, r"C:\mes_modules") print(sys.path[0]) |
Sortie :
1 | C:\mes_modules |
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.
1 2 3 4 5 6 7 | import sys sys.path.append(r"C:\modules_secondaires") sys.path.insert(0, r"C:\modules_prioritaires") print("Premier :", sys.path[0]) print("Dernier :", sys.path[-1]) |
Sortie :
1 2 | Premier : C:\modules_prioritaires Dernier : C:\modules_secondaires |
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.
1 2 3 4 5 6 7 8 9 10 | import sys chemin = r"C:\mes_modules" sys.path.append(chemin) print("Avant :", chemin in sys.path) sys.path.remove(chemin) print("Après :", chemin in sys.path) |
Sortie :
1 2 | Avant : True Après : False |
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.
1 2 3 4 5 6 7 8 9 | import sys chemin = r"C:\mes_modules" if chemin in sys.path: sys.path.remove(chemin) print("Chemin supprimé.") else: print("Chemin absent de sys.path.") |
Sortie possible :
1 | Chemin absent de sys.path. |
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.
1 2 3 4 5 6 7 8 9 | import sys chemin = r"C:\mes_modules" if chemin not in sys.path: sys.path.append(chemin) print("Chemin ajouté.") else: print("Chemin déjà présent.") |
Sortie possible :
1 | Chemin ajouté. |
Nous pouvons ensuite vérifier que le chemin appartient bien à sys.path.
1 2 3 4 5 6 7 8 | import sys chemin = r"C:\mes_modules" if chemin not in sys.path: sys.path.append(chemin) print(chemin in sys.path) |
Sortie :
1 | True |
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.
1 2 3 4 5 6 7 8 9 10 | import sys from pathlib import Path dossier = Path.home() / "mes_modules" chemin = str(dossier) if chemin not in sys.path: sys.path.append(chemin) print(chemin) |
Sortie possible sous Windows :
1 | C:\Users\dell\mes_modules |
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.
1 2 3 4 5 6 7 8 9 10 | import sys from pathlib import Path dossier = Path(__file__).resolve().parent / "modules" chemin = str(dossier) if chemin not in sys.path: sys.path.insert(0, chemin) print(chemin) |
Sortie possible :
1 | C:\Users\dell\Desktop\projet\modules |
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.
1 2 3 | import pathlib print(pathlib.__file__) |
Sortie possible :
1 | C:\Users\dell\AppData\Local\Programs\Python\Python314\Lib\pathlib\__init__.py |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import sys from pathlib import Path dossier = Path.home() / "mes_modules" chemin = str(dossier) if chemin not in sys.path: sys.path.append(chemin) print("Chemin ajouté :", chemin) print("Présent :", chemin in sys.path) for i, element in enumerate(sys.path): print(i, ":", element) |
Sortie possible :
1 2 3 4 5 6 7 8 | Chemin ajouté : C:\Users\dell\mes_modules Présent : True 0 : C:\Users\dell\Desktop\projet 1 : C:\Users\dell\AppData\Local\Programs\Python\Python314\python314.zip 2 : C:\Users\dell\AppData\Local\Programs\Python\Python314\DLLs 3 : C:\Users\dell\AppData\Local\Programs\Python\Python314\Lib 4 : C:\Users\dell\AppData\Local\Programs\Python\Python314\Lib\site-packages 5 : C:\Users\dell\mes_modules |
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/


