Обозначение Shebang: скрипты Python для Windows и Linux?
У меня есть несколько небольших скриптов, написанных на Python, которые я хочу использовать как для Windows, так и для Linux. Я хочу избежать явного вызова интерпретатора Python. Есть ли простой способ указать нотацию shebang в правильные места как на Windows, так и на Linux? Если нет, есть ли другой способ разрешить неявный вызов интерпретатора Python как на Windows, так и на Linux без необходимости изменять script при переходе между операционными системами?
Изменить: поддержка shebang в Windows предоставляется Cygwin, но я хочу использовать собственный интерпретатор Windows Python в Windows, а не Cygwin.
Изменить # 2: Похоже, нотация shebang переопределяет ассоциации файлов в терминалах Cygwin. Наверное, я могу просто удалить Cygwin Python и symlink/usr/bin/python для Windows-native Python.
Ответы
Ответ 1
Прочтите Python Launcher для Windows в документации, которая была первоначально описана в PEP 397. Это позволяет
вы определяете пользовательские конфигурации shebang в "py.ini" (например, чтобы использовать pypy),
и из коробки вы можете использовать виртуальные шебанги, такие как #!/usr/bin/env python3
, или шебанги с реальными путями, такими как #!"C:\Python33\python.exe"
. (Кавычки требуются для путей, содержащих пробелы.) Вы также можете добавить параметры командной строки в shebang. Например, следующий шебанг добавляет возможность входа в интерактивный режим после завершения сценария: #!/usr/bin/python3 -i
.
Программа установки связывает типы файлов сценариев .py(console) и .pyw(GUI) с соответственно именованными программами запуска, py.exe и pyw.exe, чтобы включить поддержку shebang для сценариев в Windows. При установке для всех пользователей средства запуска устанавливаются в папку Windows (т.е. %SystemRoot%
). Для индивидуальной установки может потребоваться вручную добавить каталог установки в PATH
, чтобы использовать py.exe в оболочке (*). Затем из командной строки вы можете запустить Python через py -2
, py -3
, py -2.6
, py -3.3-32
(32-разрядная версия) и так далее. Модуль запуска удобен в сочетании с -m
для запуска модуля в виде сценария с использованием конкретной версии интерпретатора, например, py -3 -m pip install
.
(*) Новый установщик в 3. 5+ по умолчанию "% LocalAppData%\Programs\Python\Launcher" для установки средства запуска для пользователя вместо установки вместо "python.exe", и он автоматически добавляет этот каталог к PATH
.
Ответ 2
Если вы не используете cygwin, окна не имеют поддержки shebang. Однако, когда вы устанавливаете python, оно добавляется как ассоциация файлов для .py файлов. Если вы введете только имя своего script в командной строке или дважды щелкните его в проводнике Windows, то он будет работать через python.
То, что я делаю, включает в себя скрипт #!/usr/bin/env python
в моих сценариях. Это позволяет поддерживать shebang на linux. Если вы запустили его на машине с установленным python, тогда должна существовать ассоциация файлов, и она также будет работать.
Ответ 3
Установите pywin32. Одна из приятных вещей - это настроить ассоциацию файлов *.py на интерпретатор python.
Ответ 4
Не с shebang... но вы можете установить ассоциацию файлов, см. этот вопрос SO, который посвящен Perl и связанным с ним ответам, которые также будут быть уместным, поскольку есть известные проблемы с Windows и перенаправление stdin/out...
Ответ 5
извините за открытую старую тему.
Я создаю один файл py.cmd
и py.cmd
его в папку C:\Windows\System32
py.bat:
@(
@set /p shebang=
)<%1
@set shebang=%shebang:#! =%
@%shebang% %1 %2 %3 %4 %5 %6 %7 %8 %9
Файл py.bat
объясняет:
- Получить первую строку из файла
*.py
- Удалить символы Шебанга
"#! "
- Запустите файл Python, используя путь Python Shebang
Все сценарии Python для Windows должны начинаться со строки shebang в качестве первой строки в коде:
#! c:\Python27\python.exe
или же
#! c:\Python37\python.exe
Затем запустите его: cmd> py SomePyFile.py param1 param1 paramX