Допустим, у нас есть скрипт Python do.py
, и мы хотим, чтобы его можно было вызывать без расширения, например do
или ./do
.
Если мы переименуем файл с do.py
на do
и убедимся, что у нас есть действительная строка shebang, он будет работать для всех платформ, кроме Windows. В Windows нет способа выполнить файл без расширения.
В Windows, если мы сохраним исходное расширение файла, мы сможем вызвать сценарий без полного имени, поскольку установщик Python регистрирует расширение .py
как исполняемое.
Похоже, нам нужно доставить один и тот же сценарий под двумя разными именами, чтобы он вызывался в средах Windows и не Windows Мне действительно это не нравится, и я ищу решение без этой избыточности.
Другой распространенный подход - добавить пакетный файл оболочки do.cmd
, который вызывает исходный файл do.py
. В этом есть по крайней мере одна серьезная проблема: он ломает Ctrl + C / Ctrl + Break , потому что нет способа помешать cmd.exe
вызвать вас с Завершить пакетное задание? (Да / Нет) сообщение.
Если мы собираемся использовать упаковщик, мы должны быть уверены, что:
- вернуть код ошибки (errorlevel), возвращенный исходным скриптом
- это не изменит среду
- будет повторно использовать ту же консоль (без новых окон)
- не мешает STDOUT, STDIN или STDERR
- дружить с Ctrl-C (без подсказок)
Полагаю, оптимальным решением по-прежнему является использование оболочки. Пакет не будет работать, нативный исполняемый файл будет очень сложным, поэтому, вероятно, будет работать оболочка, написанная на самом Python.