agregando directorio a sys.path / PYTHONPATH


130

Estoy tratando de importar un módulo desde un directorio particular.

El problema es que si sys.path.append(mod_directory)añado la ruta y luego abro el intérprete de Python, el directorio mod_directoryse agrega al final de la lista sys.path. Si exporto la PYTHONPATHvariable antes de abrir el intérprete de Python, el directorio se agrega al comienzo de la lista. En el último caso, puedo importar el módulo, pero en el primero, no puedo.

¿Alguien puede explicar por qué sucede esto y darme una solución para agregarlo mod_directoryal inicio, dentro de un script de Python?


Respuestas:


178

Esto funciona según lo documentado. Todas las rutas especificadas en PYTHONPATHse documentan como normalmente después del directorio de trabajo pero antes de las rutas estándar proporcionadas por el intérprete. sys.path.append()se agrega a la ruta existente. Mira aquí y aquí . Si desea que un directorio en particular sea el primero, simplemente insértelo en la cabecera de sys.path:

import sys
sys.path.insert(0,'/path/to/mod_directory')

Dicho esto, generalmente hay mejores formas de administrar las importaciones que usarlas PYTHONPATHo manipularlas sys.pathdirectamente. Ver, por ejemplo, las respuestas a esta pregunta .


gracias por la respuesta. El problema fue que no me di cuenta de que para agregar un módulo empaquetado como un archivo .egg, debe incluir el nombre de archivo en lugar de solo el directorio en python 2.6
UnadulteratedImagination

2
Hola hombre, esto rompió mi django. ¿Estás seguro de que quieres decirle a la gente que lo ponga en la parte superior?
R Claven

16
@RClaven, lo siento, es difícil decir a qué acción y resultados se refiere: "ponerlo en la parte superior" y "rompió mi django" no son muy precisos. ¿Puedes elaborar?
Ned Deily

Para obtener más información sobre cómo funciona sys.path, consulte esta respuesta stackoverflow.com/a/38403654/850326
djhaskin987

2
¡Realmente deberías usar "1" en lugar de "0"! De lo contrario, romperá sys.path . Consulte también stackoverflow.com/q/10095037/125507 .
kadee


6

En cuanto a mí, necesito cuidar mi ruta de Python. Puedo agregar su ruta al archivo /home/xy/.bashrcagregando

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

a mi /home/xy/.bashrcarchivo

Pero cuando uso pycharm, el camino todavía no está.

Entonces puedo agregar la ruta a la PYTHONPATHvariable, ejecutando -> editar configuración.

ingrese la descripción de la imagen aquí


La más simple es la mejor respuesta, agregar esto para el desarrollo hará que el autocompletado funcione
Gang

He actualizado el .bashrc como se explicó anteriormente, pero no lo reflejé en el cuaderno jupyter. El cuaderno Jupyter todavía dice que no se encontró el módulo.
Athar

3

Cambiar directorios temporalmente funciona bien para importar:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

Al ejecutar un script de Python desde Powershell en Windows, esto debería funcionar:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.