Donde se sys.path de Python inicializado a partir?
Pregunta
Cuando se sys.path de Python inicializado de?
UPD : Python es la adición de algunos caminos antes de referir 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']
Mi PYTHONPATH es:
PYTHONPATH=c:\testdir
Me pregunto dónde esos caminos antes de los PYTHONPATH vienen?
Solución
"iniciada por la variable de entorno PYTHONPATH, además de un valor predeterminado dependiente de la instalación"
Otros consejos
Python intenta realmente difícil de establecer de forma inteligente sys.path
. Como es
conjunto puede obtener realmente complicada. La siguiente guía es una aguada,
guía un tanto incompleto, algo-mal, pero es de esperar-útil
para el pitón programador rango y archivo de lo que sucede cuando pitón
se da cuenta de lo que va a utilizar como valores iniciales de sys.path
,
sys.executable
, sys.exec_prefix
y sys.prefix
en un Normal
instalación de Python.
En primer lugar, pitón hace su mejor nivel para averiguar su físico real
ubicación en el sistema de archivos basado en lo que le dice al sistema operativo
eso. Si el sistema operativo sólo dice "pitón" se está ejecutando, se encuentra en $ PATH.
Se resuelve cualquier enlace simbólico. Una vez se ha hecho esto, el camino de la
el ejecutable que se encuentra se utiliza como valor para sys.executable
, sin IFS,
ands, o peros.
A continuación, se determina los valores iniciales para sys.exec_prefix
y
sys.prefix
.
Si hay un archivo llamado pyvenv.cfg
en el mismo directorio que
sys.executable
o un directorio arriba, pitón mira. Diferente
Sistemas operativos hacen cosas diferentes con este archivo.
Uno de los valores de este archivo de configuración que busca es pitón
la opción de configuración home = <DIRECTORY>
. Python utilizará este directorio en lugar del directorio que contiene sys.executable
cuando dinámicamente establece el valor inicial de sys.prefix
más tarde. Si el ajuste aparece en la applocal = true
pyvenv.cfg
archivo en Windows, pero no el ajuste home = <DIRECTORY>
,
entonces sys.prefix
se establecerá en el directorio que contiene sys.executable
.
A continuación, se examina la variable de entorno PYTHONHOME
. En Linux y Mac,
sys.prefix
y sys.exec_prefix
se establecen en la variable de entorno PYTHONHOME
, si
existe, reemplazando cualquier ajuste home = <DIRECTORY>
en pyvenv.cfg
. En Windows,
sys.prefix
y sys.exec_prefix
se establece en la variable de entorno PYTHONHOME
,
si existe, a menos que un entorno home = <DIRECTORY>
está presente en pyvenv.cfg
,
que se utiliza en su lugar.
De lo contrario, estos sys.prefix
y sys.exec_prefix
se encuentran caminando hacia atrás
desde la ubicación de sys.executable
, o el directorio home
dada por pyvenv.cfg
si los hay.
Si se encuentra el archivo de lib/python<version>/dyn-load
en ese directorio
o cualquiera de sus directorios padre, ese directorio está dispuesto a ser estar
sys.exec_prefix
en Linux o Mac. Si el archivo
lib/python<version>/os.py
se encuentra en el directorio o cualquiera de sus
subdirectorios, ese directorio está dispuesto a ser sys.prefix
en Linux,
Mac y Windows, con juego sys.exec_prefix
al mismo valor que
sys.prefix
en Windows. Todo este paso se omite si en Windows
applocal = true
se establece. Ya sea el directorio de sys.executable
es
utilizado o, si se encuentra en home
pyvenv.cfg
, que se utiliza en lugar de
el valor inicial de sys.prefix
.
Si no se puede encontrar estos archivos "referencia" o sys.prefix
no ha sido
encontraron, sin embargo, a continuación, conjuntos pitón sys.prefix
a un "retroceso"
valor. Linux y Mac, por ejemplo, utilizan por defecto pre-compilados como el
valores de sys.prefix
y sys.exec_prefix
. esperas de Windows
hasta sys.path
está totalmente descubierto para establecer un valor de reserva para
sys.prefix
.
A continuación, (lo que todos han estado esperando,) pitón determina los valores iniciales
que han de estar contenidos en sys.path
.
- El directorio del script que se pitón se añade a la ejecución de
sys.path
. En Windows, esto siempre es la cadena vacía, que le dice a Python utilizar la ruta completa donde se encuentra la secuencia de comandos en su lugar. - El contenido de la variable de entorno PYTHONPATH, si está ajustado, se añade a
sys.path
, a menos que Esta en Windows yapplocal
se establece en true enpyvenv.cfg
. - La ruta del archivo zip, que se
<prefix>/lib/python35.zip
en Linux / Mac yos.path.join(os.dirname(sys.executable), "python.zip")
en Windows, se añade asys.path
. - Si en Windows y no
applocal = true
se puso enpyvenv.cfg
, a continuación, los contenidos de las subclaves de la clave de registro se añadenHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
, en su caso. - Si en Windows y no
applocal = true
se fijó enpyvenv.cfg
ysys.prefix
no se pudo encontrar, Se añade entonces el contenido del núcleo de laHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
de la clave de registro, si existe; - Si en Windows y no
applocal = true
se puso enpyvenv.cfg
, a continuación, los contenidos de las subclaves de la clave de registro se añadenHK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\
, en su caso. - Si en Windows y no
applocal = true
se fijó enpyvenv.cfg
ysys.prefix
no se pudo encontrar, Se añade entonces el contenido del núcleo de laHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
de la clave de registro, si existe; - Si en Windows, y PYTHONPATH no se ha establecido, no se encontró el prefijo, y no hay claves de registro estuvieron presentes, entonces el se añade valor relativo de tiempo de compilación de PYTHONPATH; de lo contrario, este paso se omite.
- Caminos en el tiempo de compilación macro PYTHONPATH se añaden con relación a la
sys.prefix
dinámicamente encontrado. - En Mac y Linux, se añade el valor de
sys.exec_prefix
. En Windows, el directorio que fue utilizado (o habría sido utilizado) para buscar dinámicamente parasys.prefix
es añadido.
En esta etapa en Windows, si no se encontró ningún prefijo, entonces Python intentará
determinarla mediante la búsqueda todos los directorios en sys.path
para los archivos de punto de referencia,
ya que trató de hacerlo con el directorio de sys.executable
anteriormente, hasta que encuentra algo.
Si no lo hace, sys.prefix
se deja en blanco.
Finalmente, después de todo esto, Python carga el módulo site
, lo que añade aún más las cosas a sys.path
:
Se inicia mediante la construcción de hasta cuatro directorios de una cabeza y una pieza de la cola. Para la parte de cabeza, que utiliza
sys.prefix
ysys.exec_prefix
; cabezas vacías se omiten. Para la parte de la cola, que utiliza la cadena vacía y luegolib/site-packages
(en Windows) olib/pythonX.Y/site-packages
y luegolib/site-python
(en Unix y Macintosh). Para cada una de las distintas combinaciones de cabeza-cola, ve si se refiere a una ya existente directorio, y si es así, lo añade a sys.path y también inspecciona el recién camino añadido para archivos de configuración.