Закрыто как not planned — идея нежизнеспособна для этого инструмента
При локальной валидации PyInstaller (перед написанием workflow) обнаружен фундаментальный блокер:
Грейдер запускает решения через subprocess.run([sys.executable, solution.py])
(core/grader_core.py:363, core/microbench_runner.py:212, core/executor.py:47)
— ему нужен настоящий интерпретатор Python.
В PyInstaller-бинаре sys.executable указывает на сам .exe, а не на Python.
Эмпирическая проверка собранного бинаря:
$ ./stepik-grader sol.py
grader.py: error: unrecognized arguments: /tmp/.../sol.py
Вместо «Python выполнил sol.py» бинарь заново запускает себя как CLI и
передаёт путь решения аргументом → решение не выполняется → FAIL 0/1.
Всё остальное в бинаре работает (rich-UI, config/tomllib, --version), но
грейдить он не может — а это его единственная функция.
Вывод: «.exe → грейдер без Python вообще» несовместимо с природой
инструмента, который сам запускает Python-код. Обойти можно было бы только
поиском системного Python в frozen-режиме (shutil.which), но тогда Python
всё равно нужен — и тот же результат даёт pipx/PyPI без 14 МБ бинарей на
платформу, antivirus false-positive и хаков с интерпретатором.
Решение владельца (2026-07-04): пивот на PyPI/pipx (#70) как честный
«установка одной командой». Эпик #80 обновлён.
Не реализовывать без пересмотра самой execution-модели грейдера.
Закрыто как not planned — идея нежизнеспособна для этого инструмента
При локальной валидации PyInstaller (перед написанием workflow) обнаружен фундаментальный блокер:
Грейдер запускает решения через
subprocess.run([sys.executable, solution.py])(
core/grader_core.py:363,core/microbench_runner.py:212,core/executor.py:47)— ему нужен настоящий интерпретатор Python.
В PyInstaller-бинаре
sys.executableуказывает на сам .exe, а не на Python.Эмпирическая проверка собранного бинаря:
Вместо «Python выполнил
sol.py» бинарь заново запускает себя как CLI ипередаёт путь решения аргументом → решение не выполняется →
FAIL 0/1.Всё остальное в бинаре работает (rich-UI, config/tomllib,
--version), ногрейдить он не может — а это его единственная функция.
Вывод: «.exe → грейдер без Python вообще» несовместимо с природой
инструмента, который сам запускает Python-код. Обойти можно было бы только
поиском системного Python в frozen-режиме (
shutil.which), но тогда Pythonвсё равно нужен — и тот же результат даёт
pipx/PyPI без 14 МБ бинарей наплатформу, antivirus false-positive и хаков с интерпретатором.
Решение владельца (2026-07-04): пивот на PyPI/pipx (#70) как честный
«установка одной командой». Эпик #80 обновлён.
Не реализовывать без пересмотра самой execution-модели грейдера.