Plonger dans l'initialisation de sys.path en Python
Comprendre le processus d'initialisation de sys.path de Python est crucial pour comprendre le chemin de recherche des modules de Python . Malgré l'idée fausse selon laquelle PYTHONPATH pilote exclusivement cette initialisation, l'algorithme complexe de Python prend en compte diverses autres sources.
Les étapes suivantes expliquent ce processus :
Initialisation de sys.executable, sys.exec_prefix et sys .prefix
- Python identifie méticuleusement son emplacement en fonction des informations du système d'exploitation, reflétant le chemin de l'exécutable physique réel dans sys.executable.
- Un fichier pyvenv.cfg dans le fichier exécutable Le répertoire ou un niveau supérieur contient des options de configuration influençant sys.prefix. Notamment, la configuration de la maison peut remplacer le répertoire par défaut contenant sys.executable.
- Si la variable d'environnement PYTHONHOME existe, elle remplace les valeurs sys.prefix et sys.exec_prefix précédemment définies.
- Échec du conditions ci-dessus, ces valeurs sont dérivées en parcourant vers l'arrière à partir de sys.executable, en recherchant des liens symboliques ou des fichiers de repère pour établir le répertoire et son préfixe.
Détermination de sys.path
Actions post-initialisation
- Le module du site est chargé, ajoutant dynamiquement chemins basés sur sys.prefix et sys.exec_prefix.
- Les fichiers de configuration sont examinés à partir des chemins ajoutés pour d'autres modifications de sys.path.
Pièges et notes importantes
- Réglage incorrect de home = dans pyvenv.cfg peut conduire à une valeur sys.prefix nulle, provoquant un retour aux valeurs par défaut précompilées.
- La présence d'une variable d'environnement PYTHONHOME peut perturber les paramètres de pyvenv.cfg sous Linux et Mac.
- L'absence de PYTHONHOME sous Windows, ainsi qu'un pyvenv.cfg manquant home = , peuvent entraîner une valeur de secours sys.prefix.
- Si sys.prefix reste non résolu pendant sys.path Lors de l'initialisation, Windows se lance dans une recherche détaillée des fichiers de repère pour le déterminer.
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!