Вопрос-Ответ

Should I put #! (shebang) in Python scripts, and what form should it take?

Должен ли я помещать #! (shebang) в скрипты Python и какую форму это должно принимать?

Должен ли я помещать shebang в свои скрипты Python? В какой форме?

#!/usr/bin/env python 

или

#!/usr/local/bin/python

Они одинаково переносимы? Какая форма используется чаще всего?

Примечание: в проекте tornado используется shebang. С другой стороны, в проекте Django этого нет.

Переведено автоматически
Ответ 1

Строка shebang в любом скрипте определяет способность скрипта выполняться как автономный исполняемый файл без предварительного ввода python в терминале или при двойном щелчке по нему в файловом менеджере (при правильной настройке). В этом нет необходимости, но обычно это помещается туда, чтобы, когда кто-то видит файл, открытый в редакторе, он сразу знал, на что смотрит. Однако, какую строку shebang вы используете, это важно.

Правильное использование для (по умолчанию используется версия 3.последняя) Скрипты наPython 3 - это:

#!/usr/bin/env python3

Правильное использование для (по умолчанию используется версия 2.последняя) Скрипты наPython 2 - это:

#!/usr/bin/env python2

Следующие должны не использоваться (за исключением тех редких случаях, когда вы пишете код, совместимый с обеими в Python 2.X и 3.х):

#!/usr/bin/env python

Причина этих рекомендаций, приведенных в PEP 394, заключается в том, что python могут относиться либо к python2, либо python3 к разным системам.

Также не используйте:

#!/usr/local/bin/python

"Python могут быть установлены на /usr/Бен/Python или /Бен/питон в тех
случаях, указанных выше #! будет плохо".


"#!/usr/bin/env python" против "#!/usr/local/bin/python"

Ответ 2

На самом деле это просто дело вкуса. Добавление shebang означает, что люди могут вызывать скрипт напрямую, если захотят (при условии, что он помечен как исполняемый); опуская его, просто означает, что python его нужно вызывать вручную.

На конечный результат запуска программы это никак не влияет; это просто варианты средств.

Ответ 3

Должен ли я помещать shebang в свои скрипты Python?


Поместите shebang в скрипт Python , чтобы указать:


  • этот модуль можно запустить как скрипт

  • может ли это выполняться только на python2, python3 или это Python 2/3 совместимо

  • в POSIX это необходимо, если вы хотите запустить скрипт напрямую, не вызывая python исполняемый файл явно


Они одинаково переносимы? Какая форма используется чаще всего?


Если вы пишете shebang вручную, то всегда используйте #!/usr/bin/env python (или #!/usr/bin/env python2 / #!/usr/bin/env python3, смотрите об этом ниже), если у вас нет конкретной причины не использовать его. Эта форма понятна даже в Windows (Python Launcher).

Примечание: установленные скрипты должны использовать определенный исполняемый файл python, например, /usr/bin/python или /home/me/.virtualenvs/project/bin/python. Плохо, если какой-то инструмент выйдет из строя, если вы активируете virtualenv в своей оболочке. К счастью, правильный shebang в большинстве случаев создается автоматически с помощью setuptools или ваших инструментов дистрибутивного пакета (в Windows, setuptools может автоматически генерировать скрипты-оболочки .exe).

Другими словами, если скрипт находится в исходном запросе, вы, вероятно, увидите #!/usr/bin/env python. Если он установлен, то shebang - это путь к определенному исполняемому файлу python, такому как #!/usr/local/bin/python (ПРИМЕЧАНИЕ: вы не должны записывать пути из последней категории вручную).

Чтобы выбрать, следует ли вам использовать python, python2 или python3 в shebang, см. PEP 394 - Команда "python" в Unix-подобных системах:



  • ... python следует использовать в строке shebang только для скриптов, исходный код которых совместим как с Python 2, так и с Python 3.



  • при подготовке к возможному изменению версии Python по умолчанию скрипты только для Python 2 следует либо обновить, чтобы они были совместимы с исходным кодом Python 3, либо использовать python2 в строке shebang.




Ответ 4

Если у вас более одной версии Python и скрипт должен выполняться под определенной версией, she-bang может гарантировать, что при непосредственном выполнении скрипта используется правильная, например:

#!/usr/bin/python2.7

Обратите внимание, что скрипт все еще может быть запущен через полную командную строку Python или через импорт, и в этом случае she-bang игнорируется. Но для скриптов, запускаемых напрямую, это достойная причина использовать she-bang .

#!/usr/bin/env python как правило, лучший подход, но это помогает в особых случаях.

Обычно было бы лучше создать виртуальную среду Python, и в этом случае generic #!/usr/bin/env python идентифицировал бы правильный экземпляр Python для virtualenv.

2023-10-23 02:42 python python-3.x