Должны ли модули библиотеки Python начинаться с #! / Usr / bin / env python? - PullRequest
8 голосов
/ 20 марта 2012

Должны ли модули библиотеки Python начинаться с #!/usr/bin/env python?

Просмотр первых строк *.py в /usr/share/pyshared (где библиотеки Python хранятся в Debian) показывает, что есть как файлы, начинающиеся со строки hashbang, так и те, которые этого не делают.

Есть ли причина включить или пропустить эту строку?

Ответы [ 3 ]

7 голосов
/ 20 марта 2012

Причина, по которой некоторые файлы в /usr/share/pyshared объявили шебанг, а некоторые не легко объяснить.Возьмите файлы uno.py и pyinotify.py.У первого нет шебанга, а у второго есть.

  1. uno.py - это модуль Python, который будет импортирован и использован в других программах / скриптах.Таким образом, он никогда не будет выполнен напрямую из командной строки.
  2. С другой стороны, pyinotify.py содержит шебанг, и вы можете видеть, что он содержит следующую строку внизу (он может быть превращен в исполняемый файл, если вы запустите на нем chmod u+x):

    if __name__ == '__main__':
        command_line()
    

Вы можете жестко закодировать двоичный файл python в shebang, но, как уже упоминали другие, использование /usr/bin/env сделает его более переносимым.

5 голосов
/ 20 марта 2012

Эта строка является линией Шебанга.За подробностями обращайтесь к статье Википедии .По сути, он указывает интерпретатор, с которым файл может быть выполнен, если он запускается напрямую из командной строки.

Нет необходимости включать эту строку в начало файла, если вы не планируете запускать ее непосредственно из оболочки.Некоторые модули Python (например, ftplib) имеют некоторые функциональные возможности при их непосредственном запуске.У них будет строка #! сверху.Большинство не имеют такой функциональности и поэтому не нуждаются в этой линии.

0 голосов
/ 20 марта 2012

если вы хотите, чтобы ваш скрипт был исполняемым, вы должны включить эту строку

...