Назначение #! / Usr / bin / python3 - PullRequest
       29

Назначение #! / Usr / bin / python3

118 голосов
/ 06 октября 2011

Я заметил это на нескольких языках сценариев, но в этом примере я использую python.Во многих уроках они начинаются с #!/usr/bin/python3 в первой строке.Я не понимаю, почему у нас это есть.

  • Разве операционная система не должна знать, что это скрипт на python (очевидно, он установлен, поскольку вы на него ссылаетесь)
  • Чтоесли пользователь использует операционную систему, которая не основана на Unix
  • Язык установлен в другой папке по любой причине
  • У пользователя другая версия.Особенно, когда это не полный номер версии (например, Python3 против Python32)

Во всяком случае, я мог видеть, что это нарушает скрипт python по перечисленным выше причинам.

Ответы [ 6 ]

194 голосов
/ 06 октября 2011

#!/usr/bin/python3 - это линия Шебанга .

Линия Шебанга определяет, где находится интерпретатор.В этом случае интерпретатор python3 находится в /usr/bin/python3.Строка shebang также может быть интерпретатором bash, ruby, perl или любым другим языком сценариев, например: #!/bin/bash.

Без строки shebang операционная система не знает, что это скрипт на python, даже если вы установите флаг выполнения для скрипта и запустите его как ./script.py.Чтобы скрипт по умолчанию выполнялся в python3, либо вызовите его как python3 script.py, либо задайте строку shebang.

Вы можете использовать #!/usr/bin/env python3 для переносимости между различными системами, если у них установлен интерпретатор языка в разныхместа.

19 голосов
/ 06 октября 2011

Это называется хэш-бэнг.Если вы запустите скрипт из оболочки, он проверит первую строку, чтобы выяснить, какая программа должна быть запущена для интерпретации скрипта.

ОС, не основанная на Unix, будет использовать свои собственные правила для определения способа запускасценарий.Например, Windows будет использовать расширение имени файла, а # приведет к тому, что первая строка будет рассматриваться как комментарий.

Если путь к исполняемому файлу Python неправильный, то, естественно, скрипт завершится ошибкой.Ссылки на фактический исполняемый файл легко создавать из любого места, указанного стандартным соглашением.

10 голосов
/ 11 октября 2011

Эта строка помогает найти исполняемый файл программы, который будет запускать скрипт.Эта нотация Шебанга является довольно стандартной для большинства языков сценариев (по крайней мере, используемых во взрослых операционных системах).

Важным аспектом этой строки является определение , какой интерпретатор будет использоваться.Например, во многих дистрибутивах, ориентированных на разработку, нормально устанавливать несколько версий python одновременно.

Python 2.x и Python 3 несовместимы на 100%, поэтому это различие может бытьочень важно.Так что #! /usr/bin/python и #! /usr/bin/python3 - это не то же самое (и ни одно и то же, что и #! /usr/bin/env python3, как отмечено в другом месте на этой странице.

5 голосов
/ 06 октября 2011
  1. И эта строка как .

  2. Это игнорируется.

  3. Этоне будет работать, и должен быть изменен, чтобы указать на правильное местоположение.Или следует использовать env.

  4. Он не будет работать и, вероятно, не сможет работать под другой версией независимо от этого.

2 голосов
/ 04 февраля 2019

Чтобы уточнить, как работает линия shebang для окон, из 3.7 Python doc :

  • Если первая строка файла скрипта начинается с # !, она называется строкой «шебанг». Linux и другие Unix-подобные операционные системы имеют встроенную поддержку таких строк, и они обычно используются в таких системах для указания того, как должен выполняться скрипт.
  • Python Launcher для Windows позволяет использовать те же возможности со скриптами Python в Windows
  • Чтобы разрешить перенос строк в сценариях Python между Unix и Windows, программа запуска поддерживает несколько «виртуальных» команд, позволяющих указать, какой интерпретатор использовать. Поддерживаемые виртуальные команды:
    • / usr / bin / env python
      • Форма / usr / bin / env линии shebang имеет еще одно специальное свойство. Прежде чем искать установленные интерпретаторы Python, эта форма будет искать в исполняемом PATH исполняемый файл Python. Это соответствует поведению программы enix Unix, которая выполняет поиск по PATH.
    • / USR / бен / питон
    • / USR / местные / бен / питон
    • питон
0 голосов
/ 25 октября 2018

На самом деле определение типа файла является очень сложным, поэтому теперь операционная система не может просто знать. Он может сделать много догадок на основе -

  • расширение
  • ИМП
  • MIME

Но командная строка не беспокоится обо всем этом, потому что она работает на ограниченном обратно совместимом слое, с тех пор, как эта причудливая ерунда ничего не значила. Если вы дважды щелкните по нему точно, современная ОС сможет это понять, но если вы запустите его из терминала, то нет, потому что терминал не заботится о ваших модных API-интерфейсах для ввода файлов, характерных для вашей ОС.

Относительно других пунктов. Это удобно, так же возможно запустить

python3 path/to/your/script

Если ваш питон находится не по указанному пути, он не будет работать, но мы склонны устанавливать такие вещи, чтобы эта штука работала, а не наоборот. На самом деле не имеет значения, если вы находитесь под * nix, ваша оболочка должна учитывать эту строку, потому что это shellcode. Так, например, вы можете запустить bash под Windows.

Вы можете фактически пропустить эту строку полностью, это просто означает, что вызывающая сторона должна будет указать интерпретатора. Также не размещайте переводчиков в нестандартных местах, а затем пытайтесь вызывать сценарии без предоставления переводчика.

...