En mi máquina, los valores de PYTHONPATH parecen insertarse en sys.path :
Por ejemplo, con PYTHONPATH=/spam:/eggs:/spam y luego revisando python -m site , obtengo un resultado como:
sys.path = [ something, '/spam', '/eggs', more, stuff, after ] Parece ser el mismo comportamiento en Python 2 y Python 3. La pregunta es, ¿cuánto de este manejo de PYTHONPATH está documentado/confiable, y si alguno puede ser diferente en otras plataformas? ¿Está esto integrado en el intérprete, o lo maneja site.py y/o está en peligro de ser "modificado" por los administradores de sistemas?
No puedo verlo explicado en la documentación aquí , solo dice que sys.path está "aumentado" (y, contrariamente a la documentación, los directorios inexistentes no parecen ignorarse silenciosamente).
Repasemos la lista.
- comenzando en el índice 1
Eso es confiable. Como se indica en los documentos de PYTHONPATH ,
La ruta de búsqueda predeterminada depende de la instalación, pero generalmente comienza con prefix/lib/pythonversion (ver PYTHONHOME arriba). Siempre se añade a PYTHONPATH.
Se insertará un directorio adicional en la ruta de búsqueda delante de PYTHONPATH como se describe anteriormente en Opciones de interfaz. La ruta de búsqueda se puede manipular desde un programa de Python como la variable sys.path.
Se inserta un directorio antes de PYTHONPATH, que puede ser el directorio actual, el directorio del script o algún otro directorio, según cómo haya ejecutado Python. Se adjuntan otros directorios. El módulo site también agregará algunos módulos a sys.path , pero el site también agrega:
Al importar este módulo, se agregarán rutas específicas del sitio a la ruta de búsqueda del módulo y se agregarán algunas funciones integradas...
- orden preservado
No creo que esto esté explícitamente documentado en ninguna parte, pero el orden de la ruta de búsqueda es importante, y cambiarlo es una interrupción de la compatibilidad con versiones anteriores que no creo que tomen a la ligera.
- deduplicado
Ese es un efecto no documentado del módulo del site . No sucederá si ejecuta Python con el indicador -S que deshabilita el site . Puede ver el código en site.removeduppaths