Интерпретатор 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.
Что такое интерпретатор Python простыми словами

Процессор понимает только машинные команды. Строка print("Привет") для него ничего не значит, поэтому между вашим кодом и железом нужен посредник. У Python эту роль выполняет интерпретатор: он берёт исходник и сразу его исполняет, без отдельного шага сборки.
Так это сформулировано и в глоссарии документации Python: язык интерпретируемый, исходные файлы можно запускать напрямую, без явного создания исполняемого файла. Там же оговорка, что граница размыта из-за компилятора байт-кода. К нему вернёмся ниже: из-за него Python работает не совсем так, как классические интерпретаторы. Чем компиляция отличается от интерпретации в целом, разобрано в статье о компиляции.
Язык у Python один, а интерпретаторов несколько:
| Интерпретатор | Где используют | Чем отличается |
|---|---|---|
| CPython | стандартная установка с python.org | каноническая реализация языка, с ней совместимы почти все библиотеки |
| PyPy | долгие вычисления на чистом Python | встроенный JIT-компилятор, по замерам проекта PyPy 3.12 в среднем примерно в 4 раза быстрее CPython 3.11 |
| MicroPython | микроконтроллеры и платы | урезанная стандартная библиотека, рассчитан на слабое железо |
Дальше речь пойдёт о CPython. Когда говорят «интерпретатор питона», почти всегда имеют в виду его. Программы обучения языку собраны в каталоге курсов по Python.
Как проверить, какой интерпретатор у вас установлен
- Откройте терминал. На Windows подойдёт командная строка или PowerShell, как с ними работать, показано в инструкции про запуск скрипта через командную строку.
- Введите
python3 --versionна macOS и Linux. На Windows работаютpython --versionиpy --list: вторая команда, по документации для Windows, показывает все установленные версии. - Чтобы увидеть путь к самому файлу интерпретатора, выполните команду из примера ниже.
$ 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, а редактор кода может взять любой другой.
Два режима работы интерпретатора

Интерпретатор умеет выполнять код по одной строке и целым файлом. Это и есть два режима, о которых спрашивают на уроках информатики: интерактивный (его ещё называют командным) и программный.
Интерактивный режим
Запустите 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 файл проходит четыре этапа. Каждый можно увидеть своими глазами модулями стандартной библиотеки.
- Токенизация. Текст режется на токены: имена, числа, операторы, переводы строк.
- Разбор. Из токенов строится абстрактное синтаксическое дерево, AST.
- Компиляция в байт-код. Дерево превращается в простые инструкции для виртуальной машины.
- Выполнение. Виртуальная машина 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 остаётся основной сборкой, и учебный код на нём работает так же, как раньше.
Частые ошибки и что с ними делать
Команда 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-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 000 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 754 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Профессия Python-разработчик Перейти на сайт курса | 140 040 ₽ | 3890 ₽/мес. | 10 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




