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?

¿Fue útil?

Solución

"iniciada por la variable de entorno PYTHONPATH, además de un valor predeterminado dependiente de la instalación"

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

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.

  1. 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.
  2. El contenido de la variable de entorno PYTHONPATH, si está ajustado, se añade a sys.path, a menos que Esta en Windows y applocal se establece en true en pyvenv.cfg.
  3. La ruta del archivo zip, que se <prefix>/lib/python35.zip en Linux / Mac y os.path.join(os.dirname(sys.executable), "python.zip") en Windows, se añade a sys.path.
  4. Si en Windows y no applocal = true se puso en pyvenv.cfg, a continuación, los contenidos de las subclaves de la clave de registro se añaden HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\, en su caso.
  5. Si en Windows y no applocal = true se fijó en pyvenv.cfg y sys.prefix no se pudo encontrar, Se añade entonces el contenido del núcleo de la HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ de la clave de registro, si existe;
  6. Si en Windows y no applocal = true se puso en pyvenv.cfg, a continuación, los contenidos de las subclaves de la clave de registro se añaden HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\, en su caso.
  7. Si en Windows y no applocal = true se fijó en pyvenv.cfg y sys.prefix no se pudo encontrar, Se añade entonces el contenido del núcleo de la HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ de la clave de registro, si existe;
  8. 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.
  9. Caminos en el tiempo de compilación macro PYTHONPATH se añaden con relación a la sys.prefix dinámicamente encontrado.
  10. 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 para sys.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 y sys.exec_prefix;   cabezas vacías se omiten. Para la parte de la cola, que utiliza la cadena vacía   y luego lib/site-packages (en Windows) o lib/pythonX.Y/site-packages   y luego lib/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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top