Python cerca veramente difficile da impostare in modo intelligente sys.path
. Come è possibile impostare reallycomplicated. La seguente guida è una guida incompleta, un po 'incompleta, un po' errata, ma si spera utile per il programmatore python rank-and-file di cosa succede quando python calcola cosa usare come valore iniziale di sys.path
, sys.executable
, sys.exec_prefix
e sys.prefix
su un normale installazione python.
In primo luogo, python è il suo livello migliore per capire la sua posizione fisica effettiva sul file system in base a ciò che dice il sistema operativo esso. Se il sistema operativo dice solo che "python" è in esecuzione, si trova in $ PATH. Risolve qualsiasi collegamento simbolico. Una volta eseguito, il percorso di l'eseguibile che trova viene utilizzato come valore per sys.executable
, senza if, ands o buts.
Successivamente, determina i valori iniziali per sys.exec_prefix
e sys.prefix
.
Se esiste un file chiamato pyvenv.cfg
nella stessa directory di sys.executable
o una directory in alto, Python la guarda. Differenti sistemi operativi con questo file.
Uno dei valori in questo file di configurazione che python cerca è l'opzione di configurazione home = <DIRECTORY>
. Python utilizzerà questa directory invece della directory contenente sys.executable
quando imposta dinamicamente il valore iniziale di sys.prefix
in seguito. Se l'impostazione applocal = true
viene visualizzata nel file pyvenv.cfg
su Windows, ma non nell'impostazione home = <DIRECTORY>
, allora sys.prefix
verrà impostato nella directory contenente sys.executable
.
Successivamente, viene esaminata la variabile di ambiente . Su Linux e Mac, sys.prefix
e sys.exec_prefix
sono impostati alla variabile PYTHONHOME
ambiente, se esiste, sostituendo qualsiasi home = <DIRECTORY>
impostazione nel pyvenv.cfg
.In Windows, sys.prefix
e sys.exec_prefix
è impostato alla variabile PYTHONHOME
ambiente, se esiste, meno un'impostazione home = <DIRECTORY>
è presente in pyvenv.cfg
, che viene utilizzato invece.
In caso contrario, questi sys.prefix
e sys.exec_prefix
si trovano camminando a ritroso dalla posizione di sys.executable
, o la directory home
data dal pyvenv.cfg
se del caso.
Se il file lib/python<version>/dyn-load
si trova in quella directory o una delle sue 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 una delle sue sottodirectory , quella directory è impostato per essere sys.prefix
su Linux, Mac , e Windows, con sys.exec_prefix
insieme allo stesso valore di sys.prefix
su Windows. L'intero passaggio viene saltato su Windows se è impostato applocal = true
. O la directory di sys.executable
è utilizzata o, se home
è impostata in pyvenv.cfg
, viene utilizzata invece 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 valore di "fallback". Linux e Mac, ad esempio, utilizzano valori predefiniti precompilati come i valori di sys.prefix
e sys.exec_prefix
. Windows attende fino a sys.path
è completamente determinato per impostare un valore di riserva per sys.prefix
.
Quindi, (quello che stavate aspettando), python determina i valori iniziali che devono essere contenuti in sys.path
.
- La directory dello script in esecuzione in python viene aggiunta a
sys.path
. Su Windows, questa è sempre la stringa vuota, che dice a python di di utilizzare invece la directory di lavoro attuale.
- Il contenuto della variabile d'ambiente PYTHONPATH, se impostato, viene aggiunto al
sys.path
, a meno che non sei su Windows e applocal
è impostata su true in pyvenv.cfg
.
- Il percorso del file zip, che è
<prefix>/lib/python35.zip
su Linux/Mac e os.path.join(os.dirname(sys.executable), "python.zip")
su Windows, viene aggiunto a sys.path
.
- Se su Windows e
applocal = true
è stato impostato su pyvenv.cfg
, vengono aggiunti, se presenti, i contenuti delle sottochiavi della chiave di registro HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
.
- Se su Windows e non è stato fissato in
applocal = true
pyvenv.cfg
, e sys.prefix
non è stato trovato, poi i contenuti fondamentali della della chiave di registro HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
viene aggiunto, se esiste;
- Se su Windows e
applocal = true
è stato impostato su pyvenv.cfg
, vengono aggiunti, se presenti, i contenuti delle sottochiavi della chiave di registro HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\
.
- Se su Windows e non è stato fissato in
applocal = true
pyvenv.cfg
, e sys.prefix
non è stato trovato, poi i contenuti fondamentali della della chiave di registro HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
viene aggiunto, se esiste;
- Se su Windows e PYTHONPATH non è stato impostato, il prefisso non è stato trovato e non sono presenti chiavi di registro, quindi viene aggiunto il valore di tempo di compilazione relativo di PYTHONPATH ; in caso contrario, questo passaggio viene ignorato.
- I percorsi nella macro in fase di compilazione PYTHONPATH vengono aggiunti rispetto allo
sys.prefix
trovato dinamicamente.
- Su Mac e Linux, è stato aggiunto il valore di
sys.exec_prefix
. Su Windows, la directory che è stata utilizzata (o sarebbe stata utilizzata) per la ricerca dinamica di sys.prefix
è stata aggiunta a .
In questa fase su Windows, se è stato trovato alcun prefisso, allora Python cercherà di determinarlo con la ricerca tutte le directory in sys.path
per i file di punto di riferimento, come ha cercato di fare con la directory di sys.executable
precedentemente, fino a quando non trova qualcosa. In caso contrario, sys.prefix
viene lasciato vuoto.
Infine, dopo tutto questo, Python carica il modulo site
, che aggiunge roba ulteriormente a sys.path
:
Si inizia costruendo fino a quattro directory da una testa e una parte coda. Per la parte principale, utilizza sys.prefix e sys.exec_prefix; Le testine vuote vengono saltate. Per la parte tail, utilizza la stringa vuota e quindi lib/site-packages (su Windows) o lib/pythonX.Y/site-packages e quindi lib/site-python (su Unix e Macintosh). Per ciascuna delle combinazioni distinte testa-coda , vede se si riferisce a una directory esistente e, in caso affermativo, la aggiunge a sys.path e controlla anche il nuovo percorso aggiunto per i file di configurazione.
Credo che provengono dal modulo sito: http://docs.python.org/library/site.html – ashcatch
I carichi dei moduli del sito e analizza i contenuti dei file .pth nel vostro sito-pacchetti directory. Questi file .pth contengono aggiunte al tuo PYTHONPATH – ASk