
Я новичок в использовании оболочки и хотел создать каталог, в $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.