Есть ли переносимый способ запуска скрипта python из оболочки без написания полного пути?Как запустить сценарий Python портативно, не указывая его полный путь
Например, в Linux, я хотел бы некоторое время в моем домашнем каталоге
cd ~
, чтобы иметь возможность запускать питон скрипт run.py, который, скажем, ~/длинный/путь/к/запуска .py, но я хочу, чтобы запустить его, просто набрав
python run.py
вместо
python ~/long/path/to/run.py
Я хотел бы надеяться на какую-то себе который содержит несколько каталогов, подобно переменной PATH, так что python run.py запускает первый run.py, который встречается в одном из каталогов.
Я рассмотрел возможность запуска run.py в исполняемый файл и добавление его каталога в системную переменную PATH, но не смог найти портативный способ создания исполняемого скрипта python.
EDIT
Через год после того, как с просьбой, я немного меньше нуб, и я вижу, что мой вопрос был не очень понятно, и не имеет особого смысла, так что после вопроса upvote я буду прояснить некоторые вещи.
1) Портативный.
Когда я спросил об этом, я сказал портативный. Однако какие переносные средства в этом случае не ясны, и я не уделял этому много внимания.
платформ: должны работать на POSIX (Linux, MacOS и т.д.) и Windows,
это до сих пор не имеет особого смысла, так как окна использует
cmd.exe
и POSIX используетsh
, поэтому каждый из них мог выполните команды с другим синтаксисом. Итак, допустим, что наиболее переносимой возможностью было бы подавать один и тот же ввод какsh
, так иcmd.exe
, запуская скрипт python в обоих случаях. В этом случае вы можете запустить ту же команду из функции ANSI Csystem
, которая используетsh
на POSIX иcmd
в Windows. ANSI C является одной из немногих вещей, которая характерна для Windows и POSIX. В этом случае вопрос имеет смысл.
2) Исполняемые
Следующая фраза turning run.py into an executable
, не очень понятно. Тем самым я говорил о стратегии Linux chmod +x run.py
, добавлял shebang #!/usr/bin/env python
и добавлял его каталог в систему, добавляя переменную окружения PATH ~/long/path/to /. Но тогда это не будет работать для окон, потому что окна не поддерживают свойство метаданных исполняемого файла, такое как Linux, и потому что/usr/bin/env не обязательно существует в Windows.
3) Расширение
Наконец, в моей голове, я надеялся на решение, которое не определяет, какой файл запуска есть, так что если когда-нибудь мы решили сделать это, скажем, файл Perl, нет интерфейсы будут меняться.
Таким образом, написание run.py
было бы плохо, потому что это указывало бы тип файла; было бы лучше, чтобы иметь возможность написать только run
Спасибо FJ, это именно то, что я искал, я чувствую, что это имеет два преимущества перед «#!» подход: 2 –
(конкретный Извините, половина закончил комментарий) ... Спасибо F.J, это то, что я искал, я чувствую, что у него есть два преимущества перед «#!» подход: 1) не загромождение скриптов 2) не загромождение глобальной переменной PATH и использование более конкретного PYTHONPATH. Недостатком, конечно же, является необходимость набирать «python -m» все время, что занимает место и что еще хуже, может означать переписывание кода, если вы когда-нибудь решите преобразовать скрипты python в, скажем, bash-скрипты. –
Я попытался выполнить python -m, но это не сработало ... Я уверен, что run.py находится в PYTHONPATH, так как я могу импортировать его, и он показывает, когда я импортирую sys; print sys.path ... я что-то не хватает? –