Où le sys.path de Python obtient-il ses valeurs initiales ?
L'initialisation du sys.path de Python implique un processus complexe qui cherche à intelligemment déterminer les chemins les plus pertinents pour l’importation de modules. Voici une répartition détaillée des étapes :
1. Détermination de l'emplacement de Python
Python détermine son emplacement physique en résolvant tous les liens symboliques et en exploitant les informations du système d'exploitation. Cette valeur est attribuée à sys.executable.
2. Initialisation de sys.exec_prefix et sys.prefix
Si un fichier pyvenv.cfg existe dans le répertoire contenant sys.executable ou un niveau supérieur, son contenu est examiné.
-
Linux et Mac : Si l'option de configuration home est spécifiée, elle remplace le répertoire sys.executable comme valeur initiale pour sys.prefix.
-
Windows : Le La variable d'environnement PYTHONHOME est prioritaire. S'il est défini, il définit sys.prefix et sys.exec_prefix. Cependant, si le fichier pyvenv.cfg contient un paramètre d'accueil, il remplace la valeur PYTHONHOME.
Sinon, sys.exec_prefix et sys.prefix sont déterminés en parcourant l'emplacement de sys.executable ou le répertoire pyvenv.cfg. Les fichiers de référence spécifiques utilisés dans ce processus sont lib/python/dyn-load et lib/python/os.py.
3. Population initiale de sys.path
- Le répertoire du script en cours d'exécution est inclus dans sys.path.
- Le contenu de la variable d'environnement PYTHONPATH est ajouté, sauf dans scénarios spécifiques (par exemple, sous Windows avec applocal=true).
- Le chemin du fichier zip, soit lib/python35.zip sous Linux/Mac, soit os.path.join(os.dirname(sys.executable), "python.zip") sous Windows, est ajouté.
Étapes supplémentaires spécifiques à la plate-forme et itératives :
-
Windows (non -applocal) : Les clés de registre liées à PythonPath sont examinées et ajoutées à sys.path.
-
Windows (avec sys.prefix inconnu) : Une recherche est effectuée dans les répertoires de sys .path pour les fichiers de repère afin de déterminer dynamiquement sys.prefix, si possible.
-
Mac et Linux : La valeur de sys.exec_prefix est ajoutée à sys.path.
- Windows : Les chemins définis au moment de la compilation dans PYTHONPATH sont ajoutés par rapport à sys.prefix (s'ils sont trouvés dynamiquement).
-
Toutes les plateformes : Python charge le module de site, qui ajoute dynamiquement des chemins supplémentaires à sys.path sur la base d'un processus de recherche complet.
Cet algorithme détaillé garantit que Python combine méticuleusement les chemins définis par le système et les variables d'environnement fournies par l'utilisateur pour fournir une recherche intelligente et flexible. chemin pour importer des modules.
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