Variable de entorno PYTHONPATH

19

Tengo esto en mi ~/.profile:

export PYTHONPATH=/home/dev/python-files

En el python-filesdirectorio, tengo algunos proyectos clonados desde git-hub (flask, curveship y py-vgdl).

Cada vez que intento iniciar cualquiera de los ejemplos en estos proyectos, obtengo errores similares a los siguientes:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

¿Me parece que no debería recibir este error porque tengo PYTHONPATHconfigurada esa variable ambiental?

Ejecutando el intérprete interactivo de python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
Jerome
fuente

Respuestas:

35

Intente agregar PYTHONPATH en lugar de sobrescribirlo por completo.

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

Referencias

De acuerdo con la documentación de Python sobre PYTHONPATH

Aumente la ruta de búsqueda predeterminada para los archivos del módulo. [...]

La ruta de búsqueda predeterminada depende de la instalación, pero generalmente comienza con prefix/lib/pythonversion(ver PYTHONHOMEarriba). Está siempre añade al PYTHONPATH.

lo que significa que existen algunos valores PYTHONPATHy que la ruta de búsqueda predeterminada también solo se agrega.

Además, esta publicación de blog ( enlace Archive.org ) también explica claramente por qué necesita adjuntarlo PYTHONPATHy no sobrescribirlo. Desplácese hacia abajo hasta la sección: los casos especiales y el examen de la ruta de búsqueda lo explican claramente (desafortunadamente no hay una URL relativa a ese enlace, por lo que tendrá que desplazarse). Aunque el usuario da los ejemplos en una Mac, son muy relevantes para cualquier plataforma

Nitin Venkatesh
fuente
1
@Garrett Gracias :) Actualizado con el enlace Archive.org.
Nitin Venkatesh
+1 para el enlace archivo / stereoplex. ¡Responde tantas preguntas que debería estar en la portada de los documentos oficiales de Python!
Malik A. Rumi
5

También puede hacer lo siguiente:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd es el directorio de trabajo actual.

Mrudhvika Damaraju
fuente
¡Cuidado, esto sobrescribirá tu PYTHONPATH en el proceso! Si desea agregar pwd a su PYTHONPATH:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111
4

PYTHONPATHdebe indicar dónde están sus paquetes y módulos de Python, no dónde están sus pagos. En otras palabras, si lo hace ls "$PYTHONPATH", debería ver *.pyarchivos ( módulos de Python ) y directorios que contienen __init__.pyarchivos ( paquetes de Python ).

Entonces, si quieres poder hacerlo import vgdl, PYTHONPATHdeberías tener este aspecto:

PYTHONPATH=/home/dev/python-files/py-vgdl

porque el vgdl paquete está adentro py-vgdl, no adentro python-files.

Para agregar las otras rutas también, puede usar :para separarlas:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

Sin embargo, esto funcionará, en tales casos, el uso PYTHONPATHpuede ser demasiado complejo. Lo que recomiendo es usar virtualenv, que está hecho a propósito para simplificar situaciones como la suya. Lo que tienes que hacer es básicamente:

  1. Crea un entorno: virtualenv env
  2. 'Activarlo': source env/bin/activate
  3. Instale sus paquetes: esto se puede hacer usando pipo la setup.pysecuencia de comandos de sus paquetes.
  4. Disfrutar.

No estoy dando mucha información porque virtualenv está bien documentado y si necesita ayuda con algo, será mejor que abra una nueva pregunta.

Andrea Corbellini
fuente