Заголовок скрипта Python
типичный заголовок должен быть
#!/usr/bin/env python
но я нашел ниже также работ, при выполнении скрипта как $python ./my_script.py
#!/usr/bin/python
#!python
в чем разница между этими 2 заголовки? Что может быть проблемой для 2-го? Пожалуйста, также обсудите случай для интерпретатора python в пути или нет. Спасибо.
6 ответов:
во-первых, каждый раз, когда вы запускаете скрипт с помощью интерпретатора явно, как в
$ python ./my_script.py $ ksh ~/bin/redouble.sh $ lua5.1 /usr/local/bin/osbf3the
#!строка всегда игнорируется. Элемент#!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