proyectos ejemplos python unix

python - ejemplos - django



Cómo usar PYTHONPATH (4)

Creo que estás mezclado entre PATH y PYTHONPATH. Todo lo que tiene que hacer para ejecutar un ''script'' es tener su directorio parental anexado 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 se deben agregar a la variable PYTHONPATH. Desafortunadamente, debido a que los diseñadores de python estaban claramente en las drogas, probar sus importaciones en la réplica con lo siguiente no garantizará que su PYTHONPATH esté configurada correctamente para usarse en una secuencia de comandos. Esta parte de la programació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 <module> from mymodule.submodule import ClassName File "/path/to/myscript_that_needs_mymodule.submodule.py", line 5, in <module> from mymodule.submodule import ClassName ImportError: No module named submodule

¿Cómo puedo hacer uso de PYTHONPATH? Cuando intento ejecutar un script en la ruta, no se encuentra el archivo. Cuando hago un cd en el directorio que contiene el script, se ejecuta el script. Entonces, ¿de qué sirve la 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 un 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á intentando.

PYTHONPATH Aumenta la ruta de búsqueda predeterminada para los archivos del módulo. El formato es el mismo que el PATH del shell: uno o más nombres de rutas de directorio separados por os.pathsep (por ejemplo, dos puntos en Unix o punto y coma en Windows). Los directorios que no existen se ignoran silenciosamente.

Además de los directorios normales, las entradas PYTHONPATH individuales pueden referirse a archivos zip que contienen módulos puros de Python (en forma de fuente o compilados). 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 (ver PYTHONHOME arriba). Siempre se adjunta a PYTHONPATH.

Se insertará un directorio adicional en la ruta de búsqueda delante de PYTHONPATH como se describe arriba en Opciones de interfaz. La ruta de búsqueda se puede manipular desde dentro de un programa de 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 secuencia de comandos python como un programa, también debe establecer un shebang para Python en la primera línea. Algo como esto debería funcionar:

#!/usr/bin/env python

Y le da privilegios de ejecución:

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

Entonces debería poder simplemente ejecutar gmbx.py desde cualquier lugar.


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

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

PYTHONPATH es utilizado por el intérprete de python para determinar qué módulos cargar.

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


PYTHONPATH solo afecta a las declaraciones de import , no a la búsqueda del intérprete de Python de nivel superior de los archivos de Python proporcionados como argumentos.

Necesitar que se establezca PYTHONPATH no es una gran idea, ya que con cualquier cosa que dependa de las variables de entorno, replicar cosas consistentemente en diferentes máquinas se vuelve complicado. Mejor es usar Python ''packages'' que se pueden instalar (usando ''pip'', o distutils) en rutas dependientes del sistema que Python ya conoce.

Lea en [ http://guide.python-distribute.org/introduction.html - Broken Link] 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 en un nivel inferior.