Подтвердить что ты не робот

Обозначение 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.

4b9b3361

Ответ 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 объясняет:

  1. Получить первую строку из файла *.py
  2. Удалить символы Шебанга "#! "
  3. Запустите файл Python, используя путь Python Shebang

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

#! c:\Python27\python.exe

или же

#! c:\Python37\python.exe

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