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.