Cómo utilizar PYTHONPATH

¿Cómo puedo hacer uso de PYTHONPATH? Cuando bash ejecutar un script en la ruta no se encuentra el archivo. Cuando cd al directorio que contiene el script, se ejecuta el script. Entonces, ¿de qué sirve el PYTHONPATH?

$ echo $PYTHONPATH :/home/randy/lib/python $ tree -L 1 '/home/randy/lib/python' /home/randy/lib/python ├── gbmx_html.py ├── gbmx.py ├── __init__.py ├── __pycache__ ├── scripts └── yesno.py $ python gbmx.py -h python: can't open file 'gbmx.py': [Errno 2] No such file or directory $ cd '/home/randy/lib/python' 

Después de cd al directorio de archivos se ejecuta ..

 $ python gbmx.py -h usage: gbmx.py [-h] [-b] 

¿Por qué no puedo hacer uso de PYTHONPATH?

Creo que estás un poco confundido. PYTHONPATH establece la ruta de búsqueda para importar módulos de Python, no para ejecutarlos como lo estás intentando.

PYTHONPATH Aumenta la ruta de búsqueda predeterminada para archivos de módulo. El formato es el mismo que el PATH del shell: una o más rutas de directorio separadas por os.pathsep (por ejemplo, dos puntos en Unix o puntos y coma en Windows). Los directorios no existentes son ignorados silenciosamente.

Además de los directorios normales, las entradas individuales de PYTHONPATH pueden referirse a archivos zip que contienen módulos puros de Python (en forma de fuente o comstackda). Los módulos de extensión no se pueden importar desde archivos zip.

La ruta de búsqueda predeterminada depende de la instalación, pero generalmente comienza con el prefijo / lib / pythonversion (vea PYTHONHOME arriba). Siempre se adjunta a PYTHONPATH.

Se insertará un directorio adicional en la ruta de búsqueda frente a PYTHONPATH como se describe anteriormente en Opciones de interfaz. La ruta de búsqueda se puede manipular desde un progtwig Python como la variable sys.path.

http://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH

Lo que estás buscando es PATH.

 export PATH=$PATH:/home/randy/lib/python 

Sin embargo, para ejecutar su script de Python como un progtwig, también necesita establecer un shebang para Python en la primera línea. Algo como esto debería funcionar:

 #!/usr/bin/env python 

Y otorgarle privilegios de ejecución:

 chmod +x /home/randy/lib/python/gbmx.py 

Entonces deberías poder ejecutar gmbx.py desde cualquier lugar.

Estás confundiendo PATH y PYTHONPATH. Usted necesita hacer ésto:

 export PATH=$PATH:/home/randy/lib/python 

El intérprete de python utiliza PYTHONPATH para determinar qué módulos cargar.

PATH es usado por el shell para determinar qué ejecutables ejecutar.

PYTHONPATH solo afecta a las declaraciones de import , no a la búsqueda de intérpretes de Python de nivel superior en los archivos de python que se presentan como argumentos.

La PYTHONPATH de establecer PYTHONPATH no es una gran idea, ya que, como ocurre con cualquier cosa que dependa de las variables del entorno, es complicado replicar las cosas de manera consistente en diferentes máquinas. Mejor es usar los ‘paquetes’ de Python que se pueden instalar (usando ‘pip’, o distutils) en rutas dependientes del sistema que Python ya conoce.

Lea la [ http://guide.python-distribute.org/introduction.html – Enlace roto] https://the-hitchhikers-guide-to-packaging.readthedocs.org/en/latest/ – ‘The Hitchhiker’s Guide to Packaging ‘, y también http://docs.python.org/2/tutorial/modules.html , que explica PYTHONPATH y paquetes a un nivel inferior.

Creo que estás confundido entre PATH y PYTHONPATH. Todo lo que tiene que hacer para ejecutar un ‘script’ es tener su directorio parental adjunto a su variable PATH. Puedes probar esto ejecutando

 which myscript.py 

Además, si myscripy.py depende de módulos personalizados, sus directorios parentales también deben agregarse a la variable PYTHONPATH. Desafortunadamente, debido a que los diseñadores de python estaban claramente en las drogas, probar sus importaciones en la respuesta con lo siguiente no garantizará que su PYTHONPATH esté configurado correctamente para su uso en un script. Esta parte de la progtwigción de Python es mágica y no puede responderse adecuadamente en stackoverflow.

 $python Python 2.7.8 blahblahblah ... >from mymodule.submodule import ClassName >test = ClassName() >^D $myscript_that_needs_mymodule.submodule.py Traceback (most recent call last): File "myscript_that_needs_mymodule.submodule.py", line 5, in  from mymodule.submodule import ClassName File "/path/to/myscript_that_needs_mymodule.submodule.py", line 5, in  from mymodule.submodule import ClassName ImportError: No module named submodule 

Con PYTHONPATH configurado como en su ejemplo, debería poder hacer

 python -m gmbx 

-m opción -m hará que Python busque su módulo en las rutas en las que Python generalmente busca los módulos, incluido lo que agregó a PYTHONPATH. Cuando ejecuta un intérprete como python gmbx.py , busca un archivo en particular y PYTHONPATH no se aplica.

Básicamente, PYTHONPATH es donde Python busca importar paquetes, mientras que PATH es donde el sistema (por ejemplo, Ubuntu) busca ejecutar ejecutables.