Заголовок скрипта Python



типичный заголовок должен быть



#!/usr/bin/env python


но я нашел ниже также работ, при выполнении скрипта как $python ./my_script.py



#!/usr/bin/python
#!python


в чем разница между этими 2 заголовки? Что может быть проблемой для 2-го? Пожалуйста, также обсудите случай для интерпретатора python в пути или нет. Спасибо.

575   6  

6 ответов:

во-первых, каждый раз, когда вы запускаете скрипт с помощью интерпретатора явно, как в

$ python ./my_script.py
$ ksh ~/bin/redouble.sh
$ lua5.1 /usr/local/bin/osbf3

the #! строка всегда игнорируется. Элемент #! line-это функция Unix исполняемый файл


Я бы предложил 3 вещи в начале вашего сценария:

во-первых, как уже было сказано, использование окружающей среды:

#!/usr/bin/env python

во-вторых, установить кодировку:

# -*- coding: utf-8 -*-

в-третьих, установите некоторую строку документа:

"""This is a awesome
    python script!"""

и наверняка я бы использовал " " (4 места) для идент.
Окончательный заголовок будет выглядеть так:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""This is a awesome
        python script!"""


наилучшие пожелания и удачи в кодировании.

исполняемый файл Python может быть установлен в месте, отличном от /usr / bin, но env почти всегда присутствует в этом месте, поэтому с помощью /usr/bin/envболее портативный.

из manpage для env (GNU coreutils 6.10):

env - run a program in a modified environment

в теории вы могли бы использовать env для сброса среды (удаление многих существующих переменных среды) или добавления дополнительных переменных среды в заголовок скрипта. Практически говоря, две версии, которые вы упомянули, идентичны. (Хотя другие упомянули хороший момент: указание python через env позволяет абстрактно указать python не зная своего пути.)

Да, есть-python не может быть в /usr/bin, но например в /usr/local/bin (BSD).

при использовании virtualenv, это может быть даже что-то вроде ~/projects/env/bin/python

The /usr/bin/env python становится очень полезным, когда ваши скрипты зависят от настроек среды, например, используя скрипты, которые полагаются на python virtualenv. Каждый virtualenv имеет свою собственную версию Python binary, которая требуется для добавления пакетов, установленных в virtualenv, в путь python (не касаясь PYTHONPATH env).

поскольку все больше и больше людей начали использовать virtualenv для разработки python предпочитаю использовать /usr/bin/env python Если вы не хотите, чтобы люди использовали свой собственный python двоичный.

Примечание: Вы также должны понимать, что существуют потенциальные проблемы безопасности (в многопользовательских средах), когда вы позволяете людям запускать ваши сценарии в своих пользовательских средах. Вы можете получить некоторые идеи от здесь.

Comments

    Ничего не найдено.