Интерпретатор Python: что это и как он выполняет код

Интерпретатор Python читает файл с кодом, переводит его в байт-код и выполняет на своей виртуальной машине.

На примерах из Python 3.14 показываю, как проверить свою версию, чем интерактивный режим отличается от программного, откуда берётся папка __pycache__ и что поменялось с GIL и JIT в новых версиях.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3177 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3831 экспертное мнение Подписаться на Телеграм-канал
Обложка: Интерпретатор Python: что это и как он выполняет код

Интерпретатор Python — это программа, которая читает файл с кодом и выполняет его команды. Самый распространённый интерпретатор называется CPython, его вы скачиваете с python.org. Работает он в два шага: сначала переводит весь файл в байт-код, затем исполняет этот байт-код на своей виртуальной машине. Отдельного исполняемого файла, как у программ на C, при этом не появляется.

Узнать, какой интерпретатор стоит у вас, можно командой python3 --version на macOS и Linux или python --version на Windows. В ноябре 2026 года на странице загрузок python.org свежая версия 3.15.2, а примеры ниже я прогонял в Python 3.14.7 на macOS.

Если Python ещё не установлен, начните с инструкции, как скачать и установить Python. Про сам язык и его место среди других подробно рассказывает статья о языке Python.

CheckroiCheckroiПодборка курсов по Python569 курсов • 52 школыСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Что такое интерпретатор Python простыми словами

Рой читает строку кода и переводит её для компьютера

Процессор понимает только машинные команды. Строка print("Привет") для него ничего не значит, поэтому между вашим кодом и железом нужен посредник. У Python эту роль выполняет интерпретатор: он берёт исходник и сразу его исполняет, без отдельного шага сборки.

Так это сформулировано и в глоссарии документации Python: язык интерпретируемый, исходные файлы можно запускать напрямую, без явного создания исполняемого файла. Там же оговорка, что граница размыта из-за компилятора байт-кода. К нему вернёмся ниже: из-за него Python работает не совсем так, как классические интерпретаторы. Чем компиляция отличается от интерпретации в целом, разобрано в статье о компиляции.

Язык у Python один, а интерпретаторов несколько:

Интерпретатор Где используют Чем отличается
CPython стандартная установка с python.org каноническая реализация языка, с ней совместимы почти все библиотеки
PyPy долгие вычисления на чистом Python встроенный JIT-компилятор, по замерам проекта PyPy 3.12 в среднем примерно в 4 раза быстрее CPython 3.11
MicroPython микроконтроллеры и платы урезанная стандартная библиотека, рассчитан на слабое железо

Дальше речь пойдёт о CPython. Когда говорят «интерпретатор питона», почти всегда имеют в виду его. Программы обучения языку собраны в каталоге курсов по Python.

Как проверить, какой интерпретатор у вас установлен

  1. Откройте терминал. На Windows подойдёт командная строка или PowerShell, как с ними работать, показано в инструкции про запуск скрипта через командную строку.
  2. Введите python3 --version на macOS и Linux. На Windows работают python --version и py --list: вторая команда, по документации для Windows, показывает все установленные версии.
  3. Чтобы увидеть путь к самому файлу интерпретатора, выполните команду из примера ниже.
$ python3 --version
Python 3.14.7
$ python3 -c "import sys; print(sys.executable)"
/opt/homebrew/opt/python@3.14/bin/python3.14

Путь нужен, когда на компьютере несколько версий Python. На моём маке команда which -a python3 нашла четыре пути к python3: версия 3.14 от Homebrew, две ссылки на 3.12 от установщика python.org и системный интерпретатор в /usr/bin. Терминал запускает первый по списку в переменной PATH, а редактор кода может взять любой другой.

Канал основателя Checkroi Вани Буявца3 800 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Два режима работы интерпретатора

Рой радуется мгновенному ответу в интерактивном режиме

Интерпретатор умеет выполнять код по одной строке и целым файлом. Это и есть два режима, о которых спрашивают на уроках информатики: интерактивный (его ещё называют командным) и программный.

Интерактивный режим

Запустите python3 без аргументов. Появится приглашение >>>, и после каждой строки интерпретатор сразу печатает результат. Для многострочных конструкций вроде if приглашение меняется на три точки, так описано в учебнике Python.

$ python3
Python 3.14.7 (main, Aug  5 2026, 10:29:49) [Clang 21.0.0 (clang-2100.1.1.101)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 3
5
>>> name = "Python"
>>> name.upper()
'PYTHON'
>>> quit()

Этот режим удобен, чтобы проверить функцию или посчитать что-то на лету. Выйти можно командой quit() или сочетанием Control-D на macOS и Linux, на Windows Control-Z.

Программный режим

Код пишут в файл с расширением .py и передают интерпретатору целиком. Так запускают всё, что длиннее пары строк.

# hello.py
def greet(name):
    return "Привет, " + name

print(greet("мир"))
$ python3 hello.py
Привет, мир

Есть промежуточный вариант: python3 -c "print(2 ** 10)" выполнит одну строку, напечатает 1024 и завершится. Писать файлы удобнее в редакторе, настройка показана в инструкциях по VS Code для Python и по PyCharm, а выбрать редактор поможет сравнение IDE для Python.

Как Python выполняет код: от текста до байт-кода

Путь кода: текст, токены, дерево и байт-код

Внутри CPython файл проходит четыре этапа. Каждый можно увидеть своими глазами модулями стандартной библиотеки.

  1. Токенизация. Текст режется на токены: имена, числа, операторы, переводы строк.
  2. Разбор. Из токенов строится абстрактное синтаксическое дерево, AST.
  3. Компиляция в байт-код. Дерево превращается в простые инструкции для виртуальной машины.
  4. Выполнение. Виртуальная машина Python берёт инструкции по одной и исполняет их.

Возьмём строку x = 2 + 3, сохраним её в файл t.py и посмотрим на токены:

$ python3 -m tokenize t.py
0,0-0,0:            ENCODING       'utf-8'
1,0-1,1:            NAME           'x'
1,2-1,3:            OP             '='
1,4-1,5:            NUMBER         '2'
1,6-1,7:            OP             '+'
1,8-1,9:            NUMBER         '3'
1,9-1,10:           NEWLINE        '\n'
2,0-2,0:            ENDMARKER      ''

Из этих токенов получается дерево. Присваивание, слева имя x, справа сложение двух констант:

>>> import ast
>>> print(ast.dump(ast.parse("x = 2 + 3"), indent=2))
Module(
  body=[
    Assign(
      targets=[
        Name(id='x', ctx=Store())],
      value=BinOp(
        left=Constant(value=2),
        op=Add(),
        right=Constant(value=3)))])

А вот что выходит из компилятора. Байт-код показывает модуль dis:

>>> import dis
>>> dis.dis(compile("x = 2 + 3", "<s>", "exec"))
  0           RESUME                   0

  1           LOAD_SMALL_INT           5
              STORE_NAME               0 (x)
              LOAD_CONST               1 (None)
              RETURN_VALUE

Сложения в байт-коде нет. Компилятор сам посчитал 2 + 3 и записал готовую пятёрку, так что при каждом запуске эта операция уже не выполняется.

Байт-код меняется от версии к версии

Вот одна и та же функция в двух версиях интерпретатора:

import dis

def add(a, b):
    return a + b

dis.dis(add)
# Python 3.12.2
  3           0 RESUME                   0

  4           2 LOAD_FAST                0 (a)
              4 LOAD_FAST                1 (b)
              6 BINARY_OP                0 (+)
             10 RETURN_VALUE

# Python 3.14.7
  3           RESUME                   0

  4           LOAD_FAST_BORROW_LOAD_FAST_BORROW 1 (a, b)
              BINARY_OP                0 (+)
              RETURN_VALUE

В 3.14 две загрузки аргументов склеены в одну инструкцию. Поэтому глоссарий и предупреждает, что байт-код не гарантирует стабильность между разными версиями Python. Опираться на конкретные инструкции в своём коде не стоит.

Почему опечатка в конце файла ломает весь запуск

Компиляция идёт до выполнения, и это хорошо видно по ошибкам. Сравните два файла, в каждом по две строки:

# syn.py: незакрытая скобка
print("a")
print("b"

$ python3 syn.py
  File "…/syn.py", line 2
    print("b"
         ^
SyntaxError: '(' was never closed
# err.py: деление на ноль
print("a")
print(1 / 0)

$ python3 err.py
a
Traceback (most recent call last):
  File "…/err.py", line 2, in <module>
    print(1 / 0)
          ~~^~~
ZeroDivisionError: division by zero

В первом случае не выполнилась даже первая строка: незакрытую скобку интерпретатор нашёл при разборе, до запуска. Во втором файл скомпилировался, первая строка отработала, а ошибка всплыла при выполнении. Такие ошибки ловят через try и except, синтаксические только исправляют в коде.

Папка __pycache__ и кеш байт-кода

Чтобы не компилировать модули при каждом запуске, Python сохраняет байт-код на диск. По учебнику Python, скомпилированная версия каждого модуля кешируется в каталоге __pycache__ под именем вида module.version.pyc.

$ ls
main.py  mymath.py
$ cat main.py
import mymath
print(mymath.add(2, 3))
$ python3 main.py
5
$ ls __pycache__
mymath.cpython-314.pyc

Здесь есть две детали, которые сбивают с толку:

  • Для файла, который вы запускаете напрямую, .pyc не пишется. Учебник говорит прямо: модуль, загруженный из командной строки, Python всегда перекомпилирует и не сохраняет результат. Поэтому в кеше лежит mymath, а main нет.
  • Кеш обновляется сам. Python сверяет даты изменения исходника и скомпилированной версии и перекомпилирует устаревшую. Удалять __pycache__ руками незачем, а в Git её обычно добавляют в .gitignore.

Если папка не появляется вовсе, проверьте флаг -B и переменную окружения PYTHONDONTWRITEBYTECODE: по описанию параметров командной строки с ними Python не пытается записывать .pyc при импорте модулей. У меня при подготовке статьи переменная стояла в окружении терминала, и кеш не создавался, пока я её не снял.

Байт-код в .pyc не делает из скрипта программу, которую можно отдать человеку без Python. Для этого интерпретатор упаковывают вместе с кодом, как в инструкции про сборку Python в exe.

GIL, сборка без GIL и JIT в новых версиях

GIL, глобальная блокировка интерпретатора, по глоссарию не даёт двум потокам одновременно выполнять байт-код Python. Реализацию CPython это упрощает, но параллелизмом на многоядерных процессорах за это приходится жертвовать.

Последние три версии меняют эту картину по шагам:

Версия Что изменилось
3.13 экспериментальная сборка без GIL (PEP 703) и базовый JIT-компилятор (PEP 744), What’s New 3.13
3.14 сборка без GIL официально поддерживается, но остаётся опциональной (PEP 779); в официальные сборки для macOS и Windows вошёл экспериментальный JIT, включается переменной PYTHON_JIT=1, What’s New 3.14
3.15 JIT доработан: по pyperformance в среднем на 7–8 % быстрее обычного интерпретатора на x86-64 Linux и на 11–12 % на macOS с AArch64, где база сравнения tail-calling интерпретатор; официальный установщик для macOS по умолчанию ставит и сборку без GIL, What’s New 3.15

Проверить свою сборку можно тремя строками. По руководству по free-threading, сборка без GIL пишет «free-threading build» в выводе python -VV, а функция sys._is_gil_enabled() показывает, выключен ли GIL в текущем процессе.

$ python3 -VV
Python 3.14.7 (main, Aug  5 2026, 10:29:49) [Clang 21.0.0 (clang-2100.1.1.101)]
$ python3 -c "import sys; print(sys._is_gil_enabled())"
True
$ python3 -c "import sys; print(sys._jit.is_available())"
False

В моей сборке из Homebrew GIL на месте, а JIT недоступен даже с PYTHON_JIT=1. Для новичка вывод простой: обычный CPython с GIL остаётся основной сборкой, и учебный код на нём работает так же, как раньше.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 800 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки и что с ними делать

Команда python не найдена

На Windows система отвечает, что python не является внутренней или внешней командой, на macOS терминал пишет zsh: command not found: python.

Решение: на macOS и Linux вызывайте python3, команды python там часто нет вовсе. На Windows попробуйте py. Если не находится и она, Python не установлен или не добавлен в PATH. Переустановите его и при установке отметьте добавление в PATH.

Библиотека установлена, а import падает с ModuleNotFoundError

Обычно pip поставил пакет в один интерпретатор, а код запускается другим. Так бывает, когда версий Python несколько.

Решение: ставьте пакеты командой python3 -m pip install имя_пакета, тогда pip гарантированно относится к тому же интерпретатору. Именно так установку записывает руководство по установке модулей. Ещё надёжнее хранить зависимости проекта в виртуальном окружении venv, разбор похожей ошибки есть в статье про установку PyGame.

В терминале работает, в редакторе нет

Редактор выбрал другой интерпретатор, не тот, что запускается в терминале.

Решение: в VS Code нажмите на версию Python в строке состояния внизу окна или выполните в палитре команд Python: Select Interpreter, оба способа описаны в документации VS Code. Выберите тот путь, который показал sys.executable в терминале.

Где освоить Python системно

Устройство интерпретатора пригодится, когда начнёте искать ошибки и ускорять код. Где запускать Python онлайн и какие компиляторы ускоряют программы, разобрано в статье про компилятор Python, а план изучения языка на год расписан в материале, как стать Python-разработчиком.

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

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox118 754 ₽4108 ₽/мес.9 месяцевОбзор курса
Профессия Python-разработчик
Перейти на сайт курса
SkillFactorySkillFactory140 040 ₽3890 ₽/мес.10 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Python интерпретируемый или компилируемый язык?

Интерпретируемый: файл .py запускают напрямую, без сборки исполняемого файла. Но внутри CPython сначала компилирует код в байт-код и только потом выполняет его на своей виртуальной машине, поэтому граница между двумя типами языков у Python размыта.

Что такое CPython?

Это стандартный интерпретатор Python, который скачивают с python.org. Когда говорят «установить Python» или «интерпретатор питона», почти всегда имеют в виду CPython. Другие реализации, например PyPy и MicroPython, выполняют тот же язык, но устроены иначе.

Как узнать, какой интерпретатор Python запускается?

Выполните в терминале python3 --version, чтобы увидеть версию, и python3 -c "import sys; print(sys.executable)", чтобы увидеть путь к файлу интерпретатора. На Windows список установленных версий показывает команда py --list.

Какие режимы работы есть у интерпретатора Python?

Два. В интерактивном режиме вы запускаете python3 без аргументов и вводите команды после приглашения >>>, результат печатается сразу. В программном режиме код лежит в файле и запускается целиком командой python3 имя_файла.py.

Можно ли удалить папку __pycache__?

Можно, ничего не сломается: Python заново скомпилирует модули при следующем импорте и снова создаст файлы .pyc. Удалять её вручную обычно незачем, кеш обновляется сам, когда меняется исходный файл.

Можно ли запустить программу на Python без установленного интерпретатора?

Только если интерпретатор упакован вместе с программой. Так делают PyInstaller и Nuitka: они собирают из скрипта exe-файл, внутри которого лежит и Python, и ваш код. Как это сделать, разобрано в инструкции про сборку Python в exe.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!