Domanda

In caso di sys.path di Python inizializzato da?

UPD : Python è l'aggiunta di alcuni percorsi prima riferendosi al PYTHONPATH:

    >>> 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']

Il mio PYTHONPATH è:

    PYTHONPATH=c:\testdir

Mi chiedo dove quei sentieri prima di quelli di PYTHONPATH vengono?

È stato utile?

Soluzione

"inizializzato dalla variabile d'ambiente PYTHONPATH, oltre a un predefinito dipendente"

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

Altri suggerimenti

Python cerca veramente difficile da impostare in modo intelligente sys.path . Com'è set può ottenere davvero complicato . La seguente è una guida annacquata, guida un po 'incompleto, in qualche modo, sbagliato, ma si spera-utile per il rango e file python programmatore di ciò che accade quando pitone capisce cosa usare come valori iniziali di sys.path, sys.executable, sys.exec_prefix, e sys.prefix su un normale installazione di Python.

In primo luogo, pitone fa del suo meglio per capire la sua effettiva fisica posizione sul filesystem base a ciò che dice al sistema operativo esso. Se il sistema operativo dice solo "python" è in esecuzione, si trova in $ PATH. Risolve tutti i collegamenti simbolici. Una volta fatto questo, il percorso di l'eseguibile che trova è utilizzato come valore per sys.executable, senza se, senza ma.

Successivamente, determina i valori iniziali per sys.exec_prefix e  sys.prefix.

Se c'è un file chiamato pyvenv.cfg nella stessa directory sys.executable o una directory up, pitone lo guarda. Diverso Sistemi operativi fanno cose diverse con questo file.

Uno dei valori in questo file di configurazione che python cerca è l'opzione di configurazione home = <DIRECTORY>. Python userà questa directory invece che la directory contenente sys.executable quando imposta dinamicamente il valore iniziale di sys.prefix tardi. Se l'impostazione applocal = true appare nella file di pyvenv.cfg su Windows, ma non l'impostazione home = <DIRECTORY>, allora sys.prefix sarà impostato alla directory contenente sys.executable.

Successivamente, la variabile di ambiente PYTHONHOME viene esaminato. Su Linux e Mac, sys.prefix e sys.exec_prefix sono impostati per la variabile di ambiente PYTHONHOME, se esiste, sostituendo ogni ambiente home = <DIRECTORY> in pyvenv.cfg. Su Windows, sys.prefix e sys.exec_prefix è impostata la variabile di ambiente PYTHONHOME, se esiste, meno un ambiente home = <DIRECTORY> è presente in pyvenv.cfg, che viene utilizzato al posto.

In caso contrario, questi sys.prefix e sys.exec_prefix si trovano camminando all'indietro dalla posizione di sys.executable, o la directory home data dal pyvenv.cfg se del caso.

Se il lib/python<version>/dyn-load file si trova nella directory o uno dei suoi directory padre, tale directory è impostato per essere per essere sys.exec_prefix su Linux o Mac. Se il file lib/python<version>/os.py si è trovato nella directory o uno qualsiasi dei suoi sottodirectory, quella directory è impostato per essere sys.prefix su Linux, Mac e Windows, con sys.exec_prefix insieme per lo stesso valore sys.prefix su Windows. Tutto questo passaggio viene saltato su Windows se applocal = true è impostato. O la directory di sys.executable è utilizzati o, se home occupa pyvenv.cfg, che viene utilizzato preferibilmente per il valore iniziale di sys.prefix.

Se non riesce a trovare questi file "punto di riferimento" o sys.prefix non è stato ancora trovato, quindi imposta pitone sys.prefix ad un "ripiego" valore. Linux e Mac, per esempio, utilizzare le impostazioni predefinite precompilati come il valori di sys.prefix e sys.exec_prefix. attese di Windows fino sys.path è completamente capito per impostare un valore di ripiego per sys.prefix.

Quindi, (quello che hai tutti aspettando,) python determina i valori iniziali che devono essere contenuti in sys.path.

  1. La directory dello script che è in esecuzione pitone viene aggiunto a sys.path. Su Windows, questo è sempre la stringa vuota, che racconta pitone a utilizzare il percorso completo in cui lo script si trova invece.
  2. Il contenuto della variabile d'ambiente PYTHONPATH, se impostato, viene aggiunto al sys.path, meno tu sei su Windows e applocal è impostata su true in pyvenv.cfg.
  3. Il percorso del file zip, che viene <prefix>/lib/python35.zip su Linux / Mac e os.path.join(os.dirname(sys.executable), "python.zip") su Windows, viene aggiunto sys.path.
  4. Se su Windows e non applocal = true è stato fissato in pyvenv.cfg, poi i contenuti delle sottochiavi della chiave di registro HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ vengono aggiunti, se del caso.
  5. Se su Windows e non applocal = true è stato fissato in pyvenv.cfg, e sys.prefix non è stato trovato, si aggiunge quindi contenuti principali del del registro HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ chiave, se esiste;
  6. Se su Windows e non applocal = true è stato fissato in pyvenv.cfg, poi i contenuti delle sottochiavi della chiave di registro HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\ vengono aggiunti, se del caso.
  7. Se su Windows e non applocal = true è stato fissato in pyvenv.cfg, e sys.prefix non è stato trovato, si aggiunge quindi contenuti principali del del registro HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ chiave, se esiste;
  8. Se su Windows, e PYTHONPATH non è stato impostato, il prefisso non è stato trovato, e non le chiavi di registro erano presenti, poi la viene aggiunto valore relativo tempo di compilazione di PYTHONPATH; in caso contrario, questo passaggio viene ignorato.
  9. Percorsi nella fase di compilazione macro PYTHONPATH vengono aggiunti rispetto al sys.prefix dinamicamente ritrovata.
  10. Su Mac e Linux, si aggiunge il valore di sys.exec_prefix. Su Windows, la directory che è stato utilizzato (o sarebbe stato utilizzato) per cercare in modo dinamico per sys.prefix è aggiunto.

In questa fase su Windows, se è stato trovato alcun prefisso, allora Python cercherà di determinarlo con la ricerca tutti le directory in sys.path per i file di punto di riferimento, come ha cercato di fare con la directory di sys.executable in precedenza, finché non trova qualcosa. In caso contrario, sys.prefix viene lasciato vuoto.

Infine, dopo tutto questo, Python carica il modulo site, che aggiunge roba ancora più a sys.path:

  

Si inizia con la costruzione di un massimo di quattro directory da una testa e un   parte della coda. Per la parte di testa, utilizza sys.prefix e sys.exec_prefix;   teste vuote vengono saltati. Per la parte di coda, si utilizza la stringa vuota   e poi lib/site-packages (su Windows) o lib/pythonX.Y/site-packages   e poi lib/site-python (su Unix e Macintosh). Per ciascuna delle   distinte combinazioni testa-coda, si vede se si riferisce ad un esistente   directory, e in caso affermativo, lo aggiunge a sys.path e ispeziona anche il neo   percorso aggiunto per i file di configurazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top