2025, Oct 31 15:18
Как исправить запуск Python в Code Runner: используем интерпретатор venv в VS Code
Code Runner в VS Code запускает системный Python, обходя venv и вызывая ошибки импорта. Настройте executorMap на $pythonPath и запускайте верный интерпретатор.
После недавнего обновления VS Code некоторые разработчики заметили, что запуск Python‑файлов через расширение Code Runner сначала запускает системный интерпретатор, а виртуальное окружение активируется уже потом. Первая попытка падает из‑за отсутствующих модулей, вторая проходит успешно, потому что venv активируется постфактум. Это не ошибка VS Code; проблема в настройках и несоответствии порядка запуска между VS Code и Code Runner.
Как воспроизвести проблему
Возьмём простой файл, который зависит от пакетов, установленных в виртуальном окружении:
from flask import Flask
print("File Executed")
При запуске через Code Runner в терминале видно, что процесс Python стартует до активации виртуального окружения. В итоге — ошибка импорта, затем запоздалая активация и только после этого успешный повторный запуск:
python -u "/home/user/project/panel/__init__.py"
ModuleNotFoundError: No module named 'flask'
source /home/user/project/.venv/bin/activate.fish
python -u "/home/user/project/panel/__init__.py"
File Executed
Если отключить Code Runner и пользоваться встроенным запуском VS Code, порядок иной: сначала выполняется команда активации, а затем скрипт запускает интерпретатор Python из виртуального окружения:
source /home/user/project/.venv/bin/activate.fish
/home/user/project/.venv/bin/python "/home/user/project/panel/__init__.py"
Что на самом деле происходит
Code Runner немедленно запускает процесс Python, поэтому команда использует глобальный интерпретатор. Терминал VS Code активирует venv уже после этого — слишком поздно для команды, которая уже была выполнена. Отключение Code Runner возвращает ожидаемый порядок: активация происходит до выполнения. Такое поведение обсуждалось в трекере задач Code Runner и связано с тем, как расширение определяет команду Python.
Как исправить некорректную настройку
Решение — заставить Code Runner использовать тот же интерпретатор, который VS Code выбрал для рабочего пространства. Обновите карту исполнителей (executorMap), чтобы команда Python использовала путь к интерпретатору, предоставленный VS Code:
"code-runner.executorMap": {
  "python": "$pythonPath -u $fullFileName"
}
Либо укажите в Code Runner прямой путь к бинарнику Python внутри вашего venv:
"code-runner.executorMap": {
  "python": "/home/user/project/.venv/bin/python -u $fullFileName"
}
В обоих случаях Code Runner сразу запустит корректный интерпретатор, скрипт выполнится в нужном окружении, а ошибка импорта исчезнет.
Почему это важно для рабочего процесса
«Разъезд» окружений — коварный источник сбоев, особенно когда зависимости находятся в venv. Если раннер вызывает неверный интерпретатор, вы получаете нестабильные результаты: отсутствие пакетов при первом запуске, непонятный успех при последующих попытках и нерепродуцируемое поведение в разных оболочках вроде fish или bash. Выравнивание Code Runner с выбором интерпретатора в VS Code устраняет этот рассинхрон и делает выполнение предсказуемым.
Практические выводы
Убедитесь, что инструмент, запускающий Python, использует тот же путь к интерпретатору, который вы ему задаёте. Если вы полагаетесь на Code Runner как на универсальную кнопку запуска для разных языков, настройте его Python‑исполнитель на использование $pythonPath или жёстко привяжите его к Python вашего venv в проекте. Если предпочитаете стандартное поведение без расширения, VS Code и так активирует venv перед запуском файла. В обоих случаях цель одна: процесс должен стартовать под правильным интерпретатором, чтобы модули корректно находились.
Один раз настройте карту исполнителей — и запуски снова станут стабильными: без лишних действий и без сюрпризов со второго раза.
Статья основана на вопросе с StackOverflow от S M Shahriar Zarir и ответе от Sindik.