sys.path#
En Python, il existe une variable path
prédéfinie dans le module sys
qui
fonctionne de manière similaire à la variable d’environnement PATH
.
Si j’essaye de l’afficher sur ma machine, voici ce que j’obtiens :
import sys
print(sys.path)
[
"",
"/usr/lib/python3.8",
"/usr/lib/python3.8/lib-dynload",
"/home/dmerej/.local/lib/python3.8/",
"/usr/lib/python3.8/site-packages",
]
- Le résultat dépend :
du système d’exploitation ;
de la façon dont Python a été installé ;
et de la présence ou non de certains répertoires.
En fait, sys.path
est construit dynamiquement par l’interpréteur Python lors
de son démarrage.
Notez également que sys.path
commence par une chaîne vide. En pratique, cela
signifie que le répertoire courant à la priorité sur tout le reste.
Priorité du répertoire courant#
Prenons un exemple. Si vous ouvrez un explorateur de fichiers dans le deuxième
élément de la liste de sys.path
(/usr/lib/python3.8/
sur ma machine),
vous trouverez un grand nombre de fichiers Python.
Notamment, vous devriez trouver un fichier random.py
dans ce répertoire.
En fait, vous trouverez la plupart des modules de la bibliothèque standard dans ce répertoire.
Maintenant, imaginons que vous avez un deuxième fichier random.py
dans votre
répertoire courant. Finalement, imaginez que vous lancez un fichier foo.py
contentant import random
dans ce même répertoire.
Et bien, c’est le fichier random.py
de votre répertoire qui sera utilisé,
et non celui de la bibliothèque standard !
Permissions des répertoires de sys.path#
Un autre aspect notable de sys.path
est qu’il ne contient que deux
répertoires dans lesquels l’utilisateur courant peut potentiellement écrire :
le chemin courant et le chemin dans ~/.local/lib
. Tous les autres
(/usr/lib/python3.8/
, etc.) sont des chemins « système » et ne peuvent
être modifiés que par un compte administrateur (avec root
ou sudo
, donc).
La situation est semblable sur macOS et Windows.