@echo off rem Sets PY to a Python 3.10+ command, offering to install Python 3.12 with winget when none is found. rem Used by setup.bat and start.bat: call find_python.bat then if not defined PY exit /b 1 set "PY=" set "CHECK=import sys; sys.exit(0 if sys.version_info >= (3, 10) else 1)" rem 1) the py launcher, 2) python on PATH (the Microsoft Store alias fails this check, it is not a real Python), rem 3) the per-user install locations winget / python.org use if not defined ONW_TEST_NOPY ( py -3 -c "%CHECK%" >nul 2>nul && set "PY=py -3" if not defined PY python -c "%CHECK%" >nul 2>nul && set "PY=python" if not defined PY for %%V in (313 312 311 310) do ( if not defined PY if exist "%LOCALAPPDATA%\Programs\Python\Python%%V\python.exe" set "PY="%LOCALAPPDATA%\Programs\Python\Python%%V\python.exe"" ) ) if defined PY exit /b 0 echo. echo Python 3.10 or newer was not found. where winget >nul 2>nul if errorlevel 1 ( echo winget is not available either. Please install Python from https://www.python.org/downloads/ echo ^(check "Add python.exe to PATH"^), then run this again. start "" https://www.python.org/downloads/ exit /b 1 ) choice /c YN /m "Install Python 3.12 for this user with winget now (accepts the Python license)" if errorlevel 2 ( echo Please install Python 3.10+ from https://www.python.org/downloads/ and run this again. exit /b 1 ) winget install -e --id Python.Python.3.12 --scope user --accept-package-agreements --accept-source-agreements if errorlevel 1 ( echo winget could not install Python. Please install it from https://www.python.org/downloads/ exit /b 1 ) rem the new PATH is not visible in this window yet: use the installed files directly if exist "%LOCALAPPDATA%\Programs\Python\Python312\python.exe" set "PY="%LOCALAPPDATA%\Programs\Python\Python312\python.exe"" if not defined PY if exist "%LOCALAPPDATA%\Programs\Python\Launcher\py.exe" set "PY="%LOCALAPPDATA%\Programs\Python\Launcher\py.exe" -3" if not defined PY ( echo Python was installed but could not be found yet. Please open a new window and run this again. exit /b 1 ) echo [setup] using %PY% exit /b 0