Skip to content

feat(dist): standalone .exe (PyInstaller) в Releases — запуск без установки Python #78

Description

@ArtVsMark

Закрыто как 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-модели грейдера.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions