Question

Où est sys.path Python initialisé à partir?

UPD : Python ajoute quelques pistes avant de PYTHONPATH se référant:

    >>> import sys
    >>> from pprint import pprint as p
    >>> p(sys.path)
    ['',
     'C:\\Python25\\lib\\site-packages\\setuptools-0.6c9-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\orbited-0.7.8-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\morbid-0.8.6.1-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\demjson-1.4-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\stomper-0.2.2-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\uuid-1.30-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\stompservice-0.1.0-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\cherrypy-3.0.1-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\pyorbited-0.2.2-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\flup-1.0.1-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\wsgilog-0.1-py2.5.egg',
     'c:\\testdir',
     'C:\\Windows\\system32\\python25.zip',
     'C:\\Python25\\DLLs',
     'C:\\Python25\\lib',
     'C:\\Python25\\lib\\plat-win',
     'C:\\Python25\\lib\\lib-tk',
     'C:\\Python25',
     'C:\\Python25\\lib\\site-packages',
     'C:\\Python25\\lib\\site-packages\\PIL',
     'C:\\Python25\\lib\\site-packages\\win32',
     'C:\\Python25\\lib\\site-packages\\win32\\lib',
     'C:\\Python25\\lib\\site-packages\\Pythonwin']

Mon PYTHONPATH est:

    PYTHONPATH=c:\testdir

Je me demande où ces chemins avant de les PythonPath de viennent?

Était-ce utile?

La solution

"Initialisé de la PYTHONPATH variable d'environnement, plus un défaut dépendant de l'installation"

- http://docs.python.org/library/sys. html # sys.path

Autres conseils

Python essaie vraiment difficile de mettre intelligemment sys.path . Comment c'est ensemble peut obtenir vraiment compliquée . Le guide suivant est édulcorée, quelque peu incomplète, quelque peu de mal, mais je l'espère Guide-utile pour le rang et le fichier programmeur python de ce qui se passe quand python les chiffres sur ce qu'il faut utiliser les valeurs initiales de sys.path, sys.executable, sys.exec_prefix et sys.prefix sur normale installation de python.

Tout d'abord, python fait de son mieux pour comprendre son physique emplacement sur le système de fichiers basé sur ce que le système d'exploitation dit il. Si le système d'exploitation dit juste « python » est en cours d'exécution, il se trouve dans $ PATH. Il résout tous les liens symboliques. Une fois qu'il a fait cela, le chemin de l'exécutable qu'il trouve est utilisée comme valeur pour sys.executable, aucun ifs, ands ou buts.

Ensuite, il détermine les valeurs initiales pour sys.exec_prefix et  sys.prefix.

S'il y a un fichier appelé pyvenv.cfg dans le même répertoire que sys.executable ou un vers le haut de répertoire, python regarde. Différent OSes faire des choses différentes avec ce fichier.

L'une des valeurs dans ce fichier de configuration qui ressemble python est l'option de configuration home = <DIRECTORY>. Python utilisera ce répertoire au lieu du répertoire contenant sys.executable quand il définit dynamiquement plus tard, la valeur initiale de sys.prefix. Si le réglage de applocal = true apparaît dans la fichier pyvenv.cfg sous Windows, mais pas le paramètre home = <DIRECTORY>, puis sys.prefix sera réglé sur le répertoire contenant sys.executable.

Ensuite, la variable d'environnement PYTHONHOME est examiné. Sous Linux et Mac, sys.prefix et sys.exec_prefix sont fixés à la variable d'environnement PYTHONHOME, si il existe, annule et remplace tout réglage home = <DIRECTORY> dans pyvenv.cfg. Sous Windows, sys.prefix et sys.exec_prefix est réglé sur la variable d'environnement PYTHONHOME, si elle existe, à moins que un cadre home = <DIRECTORY> est présent dans pyvenv.cfg, qui est utilisé à la place.

Dans le cas contraire, on trouve ces sys.prefix et sys.exec_prefix en marchant en arrière de l'emplacement de sys.executable, ou le répertoire home donné par pyvenv.cfg le cas échéant.

Si le fichier lib/python<version>/dyn-load se trouve dans ce répertoire ou l'un de ses répertoires parents, ce répertoire est défini comme être sys.exec_prefix sous Linux ou Mac. Si le fichier lib/python<version>/os.py est se trouve dans le répertoire ou l'un de ses les sous-répertoires, ce répertoire est défini à sys.prefix sous Linux, Mac et Windows, avec sys.exec_prefix ensemble à la même valeur que sys.prefix sous Windows. Cette étape entière est ignorée sous Windows si applocal = true est réglé. Soit le répertoire de sys.executable est utilisé ou, si home est situé dans pyvenv.cfg, qui est utilisé à la place pour la valeur initiale de sys.prefix.

S'il ne peut pas trouver ces fichiers « historiques » ou sys.prefix n'a pas été encore trouvé, puis jeux de python sys.prefix à un « repli » valeur. Linux et Mac, par exemple, utiliser les valeurs par défaut pré-compilés comme le les valeurs de sys.prefix et sys.exec_prefix. attend Windows jusqu'à ce que sys.path est entièrement compris à définir une valeur de repli pour sys.prefix.

Alors, (ce que vous avez tous attendu,) python détermine les valeurs initiales qui doivent être contenus dans sys.path.

  1. Le répertoire du script python qui exécute est ajouté à sys.path. Sous Windows, ce qui est toujours la chaîne vide, ce qui indique python utiliser le chemin complet où se trouve le script à la place.
  2. Le contenu de la variable d'environnement PYTHONPATH, si ensemble, est ajouté à sys.path, à moins que vous êtes sous Windows et applocal est définie sur true dans pyvenv.cfg.
  3. Le chemin du fichier zip, qui est <prefix>/lib/python35.zip sur Linux / Mac et os.path.join(os.dirname(sys.executable), "python.zip") sous Windows, est ajouté à sys.path.
  4. Si sous Windows et ne applocal = true a été mis en pyvenv.cfg, puis le contenu des sous-clés de la clé de Registre HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ sont ajoutés, le cas échéant.
  5. Si sous Windows et ne applocal = true a été mis en pyvenv.cfg et sys.prefix n'a pu être trouvée, puis les contenu de base du registre du HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ clé est ajoutée, si elle existe;
  6. Si sous Windows et ne applocal = true a été mis en pyvenv.cfg, puis le contenu des sous-clés de la clé de Registre HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\ sont ajoutés, le cas échéant.
  7. Si sous Windows et ne applocal = true a été mis en pyvenv.cfg et sys.prefix n'a pu être trouvée, puis les contenu de base du registre du HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ clé est ajoutée, si elle existe;
  8. Si sur Windows et PYTHONPATH n'a pas été défini, le préfixe n'a pas été trouvé et aucune clé de Registre étaient présents, le La valeur de temps de compilation relative de PYTHONPATH est ajouté; sinon, cette étape est ignorée.
  9. Chemins dans la compilation PYTHONPATH macro sont ajoutés par rapport au sys.prefix dynamiquement trouvé.
  10. Sur Mac et Linux, la valeur de sys.exec_prefix est ajouté. Sous Windows, le répertoire qui a été utilisé (ou aurait été utilisé) pour rechercher dynamiquement pour sys.prefix est ajouté.

A ce stade sous Windows, si aucun préfixe a été trouvé, python va essayer de déterminer en recherchant tous les répertoires sys.path pour les fichiers historiques, comme il a essayé de le faire avec le répertoire de sys.executable précédemment, jusqu'à ce qu'il trouve quelque chose. Si elle ne le fait pas, sys.prefix est vide.

Enfin, après tout cela, Python charge le module site, ce qui ajoute des choses encore plus à sys.path:

  

Il commence par construire jusqu'à quatre répertoires à partir d'une tête et un   une partie de queue. Pour la partie de la tête, il utilise sys.prefix et sys.exec_prefix;   têtes vides sont ignorées. Pour la partie de la queue, il utilise la chaîne vide   puis lib/site-packages (sous Windows) ou lib/pythonX.Y/site-packages   puis lib/site-python (sous Unix et Macintosh). Pour chacun des   distinctes combinaisons queue de tête, il voit si elle fait référence à un existant   répertoire, et si oui, ajoute à sys.path et inspecte aussi les nouveaux   chemin ajouté pour les fichiers de configuration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top