TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4333 2.56K
shebang: что это и как запускать скрипты в CLI без слова python?

При работе с Unix-подобными системами (Linux, macOS), часто используется специальная строка, которая называется 'shebang' (шибэнг). Это первая строка в скрипте, которая начинается с символов #!, за которыми идёт путь к интерпретатору, который должен выполнить этот скрипт:


#!/usr/bin/env python3

print("Hello world")


Это равносильно: «Для запуска этого файла используй интерпретатор python3, который находится в вашем PATH».

Перед запуском сделаем файл исполняемым (или сразу всю директорию):


chmod +x myscript.py
chmod +x misc/*.py


Теперь скрипт можно запустить так:

./myscript.py



Как правильно писать shebang для Python?

Существует несколько распространённых вариантов записи shebang для Python:

1. Абсолютный путь


#!/usr/bin/python3


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

2. Использование `/usr/bin/env`:


#!/usr/bin/env python3


Команда env ищет в текущем окружении пользователя нужный интерпретатор по имени python3 и запускает его. Это значит, что не важно, где установлен Python, скрипт всё равно будет работать, если python3 доступен в PATH.


Что произойдет без shebang?

Если запустить скрипт без shebang напрямую (./myscript.py), система не поймет, каким интерпретатором его запускать, и выдаст ошибку.

p.s. На Windows shebang не используется системой напрямую, но некоторые инструменты (например, Git Bash, WSL, или IDE) могут её «наследовать».

#основы
@zen_of_python
  • 👍 8
  • ❤ 2
More from @zen_of_python
  1. Sep 27, 2026Как запускать собственный SQL через миграции Django У models.Index нашлось необычное приме…
  2. Sep 27, 2026Как разделить синхронный и асинхронный Python-клиенты При переписывании akismet автор отка…
  3. Sep 27, 2026Как заменить цепочку isinstance на singledispatch Когда обработка типов разрастается, цепо…
  4. Sep 26, 2026Как собирать динамические фильтры Django через Q-объекты Q() представляет условие для SQL-…
  5. Sep 26, 2026Почему str.splitlines() видит больше переносов, чем чтение файла У Python два разных понят…
  6. Sep 26, 2026Как вручную разрешить ленивый импорт в Python У объекта, созданного через lazy import json…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →