Обозначения Шебанга: Python-скрипты в Windows и Linux? - PullRequest
56 голосов
/ 27 сентября 2011

У меня есть несколько небольших служебных скриптов, написанных на Python, которые я хочу использовать как в Windows, так и в Linux. Я хочу избежать явного вызова интерпретатора Python. Есть ли простой способ указать нотации Шебанга на правильные места в Windows и Linux? Если нет, есть ли другой способ разрешить неявный вызов интерпретатора Python как в Windows, так и в Linux без необходимости изменять сценарий при передаче между операционными системами?

Редактировать: поддержка Shebang в Windows предоставляется Cygwin, но я хочу использовать собственный интерпретатор Python для Windows в Windows, а не Cygwin.

Edit # 2: похоже, что нотация shebang переопределяет ассоциации файлов в терминалах Cygwin. Я думаю, я мог бы просто удалить Cygwin Python и symlink / usr / bin / python для Windows-родного Python.

Ответы [ 5 ]

32 голосов
/ 27 сентября 2011

Если вы не используете Cygwin, Windows не поддерживает Shebang.Однако, когда вы устанавливаете python, он добавляется как ассоциация файлов для файлов .py.Если вы поместите только имя вашего скрипта в командную строку или дважды щелкните его в проводнике Windows, то он будет работать через python.

Что я делаю, так это включаю #!/usr/bin/env python шебанг в мои скрипты.Это позволяет для поддержки Shebang на Linux.Если вы запустите его на компьютере с Windows, на котором установлен python, то там должна быть ассоциация файлов, и она также будет работать.

31 голосов
/ 04 октября 2012

Читайте о Python Launcher для Windows в документации, которая была первоначально описана в PEP 397 .Он позволяет вам определять пользовательские конфигурации shebang в ini (например, использовать pypy), но из коробки вы можете использовать виртуальные shebangs, такие как #!/usr/bin/env python3, или shebangs с реальными путями, такими как #!"C:\Python33\python.exe" (цитирование необходимо для путей, содержащихпространства).Вы также можете добавить параметры командной строки в shebang.Например, следующий шебанг добавляет возможность входа в интерактивный режим после завершения работы сценария: #!/usr/bin/python3 -i.

Python 3.3 связывает типы файлов сценариев .py (console) и .pyw (GUI) с соответственно именованными средствами запуска, py.exe и pyw.exe, чтобы включить поддержку shebang для сценариев в Windows.Новые программы запуска устанавливаются в корневую папку Windows (т. Е. %SystemRoot%) при установке для всех пользователей.В противном случае вы захотите добавить каталог установки в PATH, чтобы использовать py.exe в оболочке.Затем из командной строки вы можете запустить py -2, py -3, py -2.6, py -3.3-32 (32-бит) и так далее.Панель запуска удобна в сочетании с -m для запуска модуля в виде скрипта, например py -3 -m pip install.

Существует также версия pylauncher , которую можно установить отдельно, если вы используете только Python 2.

1 голос
/ 28 сентября 2011

Установите pywin32.Одним из приятных моментов является то, что он устанавливает сопоставление файлов * .py с интерпретатором Python.

0 голосов
/ 25 июня 2019

извините за открытую старую тему.

Я создаю один файл 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 объяснение файла:

  1. Получить первую строку из *.py file
  2. Удалить символы shebang "#! "
  3. Запустить файл python, используя путь python shebang

Все сценарии Python для Windows должны начинаться со строки shebang в качестве первой строки кода:

#! c:\Python27\python.exe

или

#! c:\Python37\python.exe

Затем запустите его: cmd> py SomePyFile.py param1 param1 paramX

0 голосов
/ 27 сентября 2011

Не с shebang ... но вы можете установить ассоциацию файлов, см. этот вопрос SO , который касается Perl и связанных с ним ответов, которые также будут уместны, поскольку существуют известные проблемы с Windows и перенаправление stdin / out ...

...