echo $PATH показывает путь к скриптам Python, но они не могут быть выполнены

echo $PATH показывает путь к скриптам Python, но они не могут быть выполнены

Я новичок в использовании оболочки и хотел создать каталог, в $HOMEкоторый я мог бы поместить все свои скрипты Python, задать путь к этому каталогу, чтобы я мог зайти в любую папку на моем Mac и выполнить эти скрипты для определенных файлов, без необходимости размещения скрипта в том же каталоге, что и файл, который будет служить входными данными для этих скриптов.

Я прочитал и добавил это в свой .zshrcфайл:

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

Затем я добавил скрипт под названием sleep_plotter.py, python_functions/binкуда я планирую помещать все свои будущие скрипты.

Однако когда я перехожу в папку, содержащую текстовый файл, который я хочу использовать в качестве входных данных для этого скрипта, и ввожу python sleep_plotter.py 113testCtM113.txt, где последний аргумент — текстовый файл, который я хочу использовать в качестве входных данных для моего скрипта, я получаю следующее сообщение об ошибке:

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

Но когда я вызываю путь с помощью echo $PATH, я вижу это:

/Users/myname/python_functions/bin: 

Из этого я сделал вывод, что Python ищет файл в этом каталоге, когда я выполняю команду Python, поэтому он должен работать, sleep_plotter.pyдаже если я нахожусь в другой папке, не содержащей этот файл.

Я использую Mac OSX 10.11.2, zsh и Anaconda 2.3.0.

решение1

PATHпеременная определяет каталоги, в которых выполняется поиск при выполнении команд. Однако при выполнении python sleep_plotter.py 113testCtM113.txt, sleep_plotter.pyявляется аргументом программы python(командой). Shell использует PATHдля поиска python, но не ее аргументы.

Вы можете добавить исполняемый атрибут к вашему скрипту:

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

Добавитьпритонпоследовательность в начало (первая строка) вашего скрипта Python:

#!/usr/bin/env python

И запустите скрипт напрямую как команду:

$ sleep_plotter.py 113testCtM113.txt

решение2

Если вы хотите расширить Python для поиска в дополнительных каталогах, то вам нужно сделать две вещи: установить переменную PYTHONPATH и использовать эту -mопцию в Python.

В ~/.zshrc(обратите внимание, что там нет « $PATHв»):

export PYTHONPATH="$HOME/python_functions/bin"

А в терминале используйте:

python -m sleep_plotter 113testCtM113.txt

что потребует столько же ввода текста, сколько и раньше, поскольку вам придется опустить .pyрасширение файла Python.

Связанный контент