Maison  >  Article  >  développement back-end  >  Comment Python initialise-t-il la liste sys.path ?

Comment Python initialise-t-il la liste sys.path ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 19:05:30262parcourir

How does Python initialize the sys.path list?

Où est initialisé le sys.path de Python ?

Le sys.path de Python, qui contient les répertoires dans lesquels Python recherche les modules à importer, subit un processus d’initialisation complexe pour déterminer ses valeurs initiales. Voici un aperçu de la façon dont il est configuré :

Détermination sys.executable

  • Python localise son emplacement physique sur le système de fichiers et l'utilise comme valeur pour sys .executable.

sys.exec_prefix et sys.prefix Initialisation

  • Python lit le fichier pyvenv.cfg dans le même répertoire que sys.executable ou un répertoire vers le haut.
  • Si le fichier existe, il extrait les informations suivantes :

    • Sous Windows : si "applocal = true", sys.prefix est défini sur le répertoire contenant sys.executable. Sinon, il utilise le "home = "
    • Sous Linux/Mac : Sys.exec_prefix est défini sur "home = " directif. Sys.prefix est également défini sur cette valeur, sauf si la variable d'environnement PYTHONHOME existe.
  • Si pyvenv.cfg n'existe pas ou ne contient pas les informations nécessaires, Python tente de déterminer sys.exec_prefix et sys.prefix en revenant en arrière à partir de sys.executable, à la recherche de fichiers de repère spécifiques.

Initialisation de sys.path

  1. Python ajoute le répertoire du script en cours d'exécution à sys.path.
  2. Sous Linux/Mac, il ajoute la variable d'environnement PYTHONPATH, si elle est définie.
  3. Il inclut le chemin du fichier zip (/lib/python35.zip ou path/to/python.zip).
  4. Sous Windows et sans "applocal = true" dans pyvenv.cfg, il ajoute des sous-clés de "HK_CURRENT_USERSoftwarePythonPythonCore< ;DLLVersion>PythonPath."
  5. Sous Windows et sans "applocal = true" dans pyvenv.cfg, et si sys.prefix n'a pas été trouvé, il ajoute le "contenu principal" de "HK_CURRENT_USERSoftwarePythonPythonCorePythonPath. "
  6. Sous Windows et sans "applocal = true" dans pyvenv.cfg, il ajoute des sous-clés de "HK_LOCAL_MACHINESoftwarePythonPythonCorePythonPath."
  7. Sous Windows et sans "applocal = true" dans pyvenv. .cfg, et si sys.prefix n'a pas été trouvé, il ajoute le "contenu principal" de "HK_LOCAL_MACHINESoftwarePythonPythonCorePythonPath."
  8. Sous Windows et avec PYTHONPATH non défini, préfixe introuvable et aucune clé de registre présent, il ajoute la valeur relative au moment de la compilation de PYTHONPATH.
  9. Il intègre les chemins dans la macro de compilation PYTHONPATH par rapport au sys.prefix trouvé dynamiquement.
  10. Sous Linux/Mac, il ajoute sys.exec_prefix. Sous Windows, il ajoute le répertoire utilisé pour rechercher sys.prefix.
  11. Sous Windows et sans "applocal = true" dans pyvenv.cfg, il tente de trouver sys.prefix en localisant les fichiers de repère dans sys.path . En cas d'échec, il laisse sys.prefix vide.

Modification supplémentaire par le module de site

  • Le module de site modifie en outre sys.path en ajoutant répertoires basés sur sys.prefix, sys.exec_prefix et des chemins spécifiques à la plate-forme.
  • Il inspecte ces nouveaux chemins pour les fichiers de configuration, en ajoutant potentiellement plus de chemins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn