@@ -0,0 +1,128 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions
|
||||
cd /d "%~dp0"
|
||||
chcp 65001 >nul 2>&1
|
||||
|
||||
set "DO_PAUSE=1"
|
||||
set "WANT_CLEAN=0"
|
||||
set "FAST=0"
|
||||
|
||||
:parse_args
|
||||
if "%~1"=="" goto :args_done
|
||||
if /i "%~1"=="nopause" set "DO_PAUSE=0"
|
||||
if /i "%~1"=="clean" set "WANT_CLEAN=1"
|
||||
if /i "%~1"=="fast" set "FAST=1"
|
||||
shift
|
||||
goto :parse_args
|
||||
:args_done
|
||||
|
||||
set "PYI_SPEC=md2gost.spec"
|
||||
set "PYI_WORK="
|
||||
set "PYI_DIST="
|
||||
set "PYI_CLEAN=--clean"
|
||||
if "%FAST%"=="1" (
|
||||
set "PYI_SPEC=md2gost.fast.spec"
|
||||
set "PYI_WORK=--workpath build-fast"
|
||||
set "PYI_DIST=--distpath dist"
|
||||
set "PYI_CLEAN="
|
||||
if "%WANT_CLEAN%"=="1" set "PYI_CLEAN=--clean"
|
||||
)
|
||||
|
||||
if "%FAST%"=="1" (
|
||||
echo === md2gost: сборка exe через uvx, Python 3.11, fast spec ===
|
||||
echo Spec: md2gost.fast.spec
|
||||
echo Кэш: build-fast\
|
||||
) else (
|
||||
echo === md2gost: сборка exe через uvx, Python 3.11 ===
|
||||
echo Spec: md2gost.spec
|
||||
)
|
||||
echo Каталог: %CD%
|
||||
echo uvx сам возьмёт CPython 3.11 ^(скачает, если ещё нет^).
|
||||
echo.
|
||||
|
||||
set "UVX_BIN="
|
||||
for /f "delims=" %%I in ('where uvx 2^>nul') do (
|
||||
set "UVX_BIN=%%I"
|
||||
goto :got_uvx
|
||||
)
|
||||
if exist "%USERPROFILE%\.local\bin\uvx.exe" set "UVX_BIN=%USERPROFILE%\.local\bin\uvx.exe"
|
||||
if defined UVX_BIN goto :got_uvx
|
||||
if exist "%USERPROFILE%\.cargo\bin\uvx.exe" set "UVX_BIN=%USERPROFILE%\.cargo\bin\uvx.exe"
|
||||
if defined UVX_BIN goto :got_uvx
|
||||
|
||||
echo uvx не найден. Установите uv: https://docs.astral.sh/uv/getting-started/installation/
|
||||
echo powershell: irm https://astral.sh/uv/install.ps1 ^| iex
|
||||
goto :fail
|
||||
|
||||
:got_uvx
|
||||
echo uvx: %UVX_BIN%
|
||||
"%UVX_BIN%" --python 3.11 python -c "import sys; print('CPython', sys.version.split()[0], sys.executable)"
|
||||
if errorlevel 1 goto :nopython
|
||||
|
||||
if not exist "md2gost\Template.docx" goto :notemplate
|
||||
|
||||
echo [1/4] PlantUML jar + Graphviz + Mermaid assets ...
|
||||
"%UVX_BIN%" --python 3.11 --isolated --with-editable . -- python scripts\fetch_plantuml.py
|
||||
if "%FAST%"=="1" (
|
||||
if not exist "md2gost\vendor\plantuml.jar" goto :nojar
|
||||
) else (
|
||||
if not exist "md2gost\vendor\plantuml.jar" (
|
||||
echo Предупреждение: plantuml.jar нет — в exe UML пойдёт через kroki.io.
|
||||
)
|
||||
)
|
||||
"%UVX_BIN%" --python 3.11 --isolated --with-editable . -- python scripts\fetch_graphviz.py
|
||||
if not exist "md2gost\vendor\graphviz\bin\dot.exe" (
|
||||
echo Предупреждение: Graphviz нет — в exe DFD пойдёт через kroki.io / PATH.
|
||||
)
|
||||
if not exist "md2gost\diagrams\mermaid.min.js" (
|
||||
"%UVX_BIN%" --python 3.11 --isolated --with-editable . -- python scripts\fetch_mermaid.py
|
||||
)
|
||||
if "%FAST%"=="0" (
|
||||
if not exist "md2gost\diagrams\mermaid.min.js" (
|
||||
echo Предупреждение: mermaid.min.js нет — браузерный Mermaid в exe без assets.
|
||||
)
|
||||
)
|
||||
|
||||
echo [2/4] Эфемерное окружение: проект + matplotlib + PyInstaller ^(CPython 3.11^) ...
|
||||
echo [3/4] PyInstaller, один файл ...
|
||||
"%UVX_BIN%" --python 3.11 --isolated --from "pyinstaller>=6.0" --with-editable . --with "matplotlib>=3.7" --with "tkinterdnd2" -- pyinstaller --noconfirm %PYI_CLEAN% %PYI_WORK% %PYI_DIST% %PYI_SPEC%
|
||||
if errorlevel 1 goto :pyifail
|
||||
|
||||
if not exist "dist\md2gost.exe" goto :noexe
|
||||
|
||||
echo.
|
||||
echo [4/4] Готово:
|
||||
echo %CD%\dist\md2gost.exe
|
||||
echo.
|
||||
echo Двойной клик — GUI. Из консоли: md2gost.exe report.md -o report.docx
|
||||
echo Быстрый кэш: build-exe-uvx.bat fast
|
||||
echo Полный пересбор fast: build-exe-uvx.bat fast clean
|
||||
echo.
|
||||
if "%DO_PAUSE%"=="1" pause
|
||||
exit /b 0
|
||||
|
||||
:nopython
|
||||
echo uvx не смог запустить Python 3.11.
|
||||
goto :fail
|
||||
|
||||
:notemplate
|
||||
echo Нет md2gost\Template.docx — сборка бессмысленна.
|
||||
goto :fail
|
||||
|
||||
:nojar
|
||||
echo Нет md2gost\vendor\plantuml.jar — portable exe без jar не собираем.
|
||||
goto :fail
|
||||
|
||||
:pyifail
|
||||
echo PyInstaller завершился с ошибкой.
|
||||
goto :fail
|
||||
|
||||
:noexe
|
||||
echo dist\md2gost.exe не появился.
|
||||
goto :fail
|
||||
|
||||
:fail
|
||||
echo.
|
||||
echo Сборка не удалась.
|
||||
if "%DO_PAUSE%"=="1" pause
|
||||
exit /b 1
|
||||
Reference in New Issue
Block a user