echo $PATH muestra la ruta a los scripts de Python, pero no se pueden ejecutar

echo $PATH muestra la ruta a los scripts de Python, pero no se pueden ejecutar

Soy nuevo en el uso del shell y quería crear un directorio donde $HOMEpueda colocar todos mis scripts de Python, establecer una ruta a ese directorio, para poder ir a cualquier carpeta de mi Mac y ejecutar esos scripts en ciertos archivos. sin que el script tenga que estar contenido dentro del mismo directorio que el archivo que serviría como entrada para esos scripts.

Leí y agregué esto a mi .zshrcarchivo:

export PATH="$HOME/python_functions/bin:$PATH"

Luego agregué un script llamado sleep_plotter.pya python_functions/bin, que es donde planeo colocar todos mis scripts futuros también.

Sin embargo, cuando navego a la carpeta que contiene el archivo de texto que quiero usar como entrada para ese script y escribo python sleep_plotter.py 113testCtM113.txt, siendo el último argumento la entrada del archivo de texto para mi script, aparece el siguiente mensaje de error:

python: can't open file 'sleep_plotter.py': [Errno 2] No such file or directory

Pero cuando llamo a la ruta usando echo $PATH, veo esto:

/Users/myname/python_functions/bin: 

De esto, deduje que Python busca en ese directorio cuando ejecuto un comando de Python, por lo que debería poder ejecutarse sleep_plotter.pyincluso cuando estoy en una carpeta diferente que no contiene este archivo.

Estoy usando Mac OSX 10.11.2, zsh y Anaconda 2.3.0.

Respuesta1

PATHLa variable define los directorios en los que se buscan al ejecutar comandos. Sin embargo, cuando ejecuta python sleep_plotter.py 113testCtM113.txt, sleep_plotter.pyes un argumento para el pythonprograma (comando). Shell utiliza PATHpara encontrar python, pero no sus argumentos.

Puede agregar un atributo ejecutable a su script:

$ chmod +x /Users/myname/python_functions/bin/sleep_plotter.py

Agrega unel asuntosecuencia hasta la parte superior (primera línea) de su secuencia de comandos Python:

#!/usr/bin/env python

Y ejecute el script directamente como un comando:

$ sleep_plotter.py 113testCtM113.txt

Respuesta2

Si desea extender Python para buscar en directorios adicionales, debe hacer dos cosas: configurar la variable PYTHONPATH y usar la -mopción en Python.

En ~/.zshrc(tenga en cuenta que no hay $PATHallí):

export PYTHONPATH="$HOME/python_functions/bin"

Y en el terminal uso:

python -m sleep_plotter 113testCtM113.txt

que escribe tanto como antes, porque debe omitir la .pyextensión en el archivo de Python.

información relacionada