Comment trouver des modules sur le disque
Pour pouvoir utiliser le code d’un module, Python doit être capable de le localiser et de le charger en mémoire. Ces chemins d’accès sont enregistrés dans une liste gérée par Python. Chaque fois que vous avez besoin d’importer un module, Python fait une recherche dans les chemins d’accès qu’il connaît afin de le retrouver. Ces informations proviennent de trois sources :
- Variables d’environnement : Le Chapitre 3 vous explique ce dont il s’agit. En particulier, la variable d’environnement PYTHONPATH indique à Python où rechercher des modules sur le disque.
- Dossier courant : Plus haut dans ce chapitre, vous avez appris que vous pouviez modifier le dossier courant de Python de manière à ce qu’il puisse localiser les modules utilisés par votre application.
- Dossiers par défaut : Même si vous n’avez pas défini de variables d’environnement, et que le dossier courant ne contient pas de module utilisable, Python est tout de même capable de retrouver ses propres bibliothèques dans la liste des dossiers par défaut qui est incluse dans sa propre configuration.
Il est utile de connaître le ou les chemins d’accès courant, car une erreur dans une telle information, ou l’absence de celle-ci, peut faire échouer votre application. Voici comment procéder pour récupérer ces chemins d’accès courant :
- Ouvrez une fenêtre de Python en mode Shell.
- Tapez import sys et appuyez sur Entrée.
>>> import sys >>>
- Tapez for p in sys.path : et appuyez sur Entrée.
Python indente automatiquement la nouvelle ligne en attendant la suite de la boucle for. L’attribut sys.path contient toujours une liste des chemins d’accès par défaut. - Tapez print(p) et appuyez deux fois sur Entrée.
Vous voyez s’afficher une liste de chemins d’accès. Bien sûr, le résultat que vous obtenez diffère certainement de celui de la figure. Tout dépend de votre plate-forme, de la version de Python que vous utilisez, du dossier dans lequel Python est installé et des fonctionnalités que vous avez pu lui ajouter.>>> for p in sys.path: ... print(p) ... D:\Programme\Python310\python310.zip D:\Programme\Python310\DLLs D:\Programme\Python310\lib D:\Programme\Python310 D:\Programme\Python310\lib\site-packages
L’attribut sys.path contient une liste des chemins d’accès connus de Python.
- Tapez import os et appuyez sur Entrée.
- Tapez maintenant os.environ[’PYTHONPATH’].split(os.pathsep) et appuyez sur Entrée.
>>> import os >>> os.environ['PYTHONPATH'].split(os.pathsep) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Programme\Python310\lib\os.py", line 679, in __getitem__ raise KeyError(key) from None KeyError: 'PYTHONPATH'
Si la variable PYTHONPATH existe, son contenu va s’afficher.
L’attribut sys.path ne comprend pas de fonction split() (diviser). C’est pourquoi l’exemple utilise une boucle for. Par contre另一方面, l’attribut os.environ[’PYTHONPATH’] possède une telle fonction, ce qui permet de créer une liste de chemins individuels.
La fonction split() doit contenir une valeur permettant de découper 拆分 une liste d’éléments en ses composants. La (autrement dit, une valeur prédéfinie预定义, fixée une fois pour toutes) os.pathsep définit le séparateur entre ces différents éléments. Même si ce séparateur peut varier d’une plate-forme à une autre, Python se charge de la question, ce qui vous permet d’utiliser partout ce même code. - Refermez la fenêtre de Python.
Vous pouvez également ajouter ou supprimer des éléments de sys.path. Si vous voulez ajouter les exemples du Chapitre 9 à votre liste de modules, vous tapez sys.path.append('D:\\Python\\Code\\Nuls\\Chapitre10') et vous appuyez sur Entrée. Vous pourrez ensuite reprendre la boucle ci-dessus pour vérifier le résultat. De la même manière, il est aussi possible de supprimer un chemin d’accès en utilisant une syntaxe du genre sys.path.remove('D:\\Python\\Code\\Nuls\\Chapitre10').
>>> sys.path.append('D:\\Python\\Code\\Nuls\\Chapitre10')
>>> sys.path.remove('D:\\Python\\Code\\Nuls\\Chapitre10')
>>> os.environ[’PYTHONPATH’].split(os.pathsep)
File "<stdin>", line 1
os.environ[’PYTHONPATH’].split(os.pathsep)
^
SyntaxError: invalid character '’' (U+2019)
Vous devez demander des informations sur les variables d’environnement séparément.