RodSizer_web / RodSizer_DEBUG_Windows.bat
Caesium135's picture
Initial commit
065e391
Raw History Blame Contribute Delete
7.25 kB
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
set "PROJECT_DIR=%CD%"
set "BACKEND_DIR=%PROJECT_DIR%\backend"
set "VENV_DIR=%PROJECT_DIR%\.venv"
set "VENV_PYTHON=%VENV_DIR%\Scripts\python.exe"
set "APP_URL=http://127.0.0.1:8501"
set "TEMP_CHECK=%PROJECT_DIR%\_check_rodsizer_imports.py"
set "TEMP_REQ=%PROJECT_DIR%\_requirements_windows_debug.txt"
set "FRESH_VENV=0"
set "REPAIR_ATTEMPTED=0"
echo ==================================================
echo RodSizer - DEBUG & REPAIR
echo ==================================================
echo.
set "PY_EXE="
REM --- 1. Find Python ---
python --version >nul 2>&1
if %errorlevel% equ 0 set "PY_EXE=python"
if defined PY_EXE goto FOUND_PYTHON
py --version >nul 2>&1
if !errorlevel! equ 0 set "PY_EXE=py"
if defined PY_EXE goto FOUND_PYTHON
REM Auto-Detect
if exist "C:\Python39\python.exe" set "PY_EXE=C:\Python39\python.exe" & goto FOUND_PYTHON
if exist "C:\Python310\python.exe" set "PY_EXE=C:\Python310\python.exe" & goto FOUND_PYTHON
if exist "C:\Python311\python.exe" set "PY_EXE=C:\Python311\python.exe" & goto FOUND_PYTHON
if exist "C:\Program Files\Python39\python.exe" set "PY_EXE=C:\Program Files\Python39\python.exe" & goto FOUND_PYTHON
if exist "C:\Program Files\Python310\python.exe" set "PY_EXE=C:\Program Files\Python310\python.exe" & goto FOUND_PYTHON
if exist "C:\Program Files\Python311\python.exe" set "PY_EXE=C:\Program Files\Python311\python.exe" & goto FOUND_PYTHON
:ASK_USER
echo.
echo [ERROR] Could not find Python automatically.
echo.
echo Please locate your 'python.exe' file.
echo IMPORTANT: Drag the FILE, not a shortcut.
set /p "PY_EXE=Drag and Drop python.exe here: "
set "PY_EXE=!PY_EXE:"=!"
echo "!PY_EXE!" | findstr /i ".lnk" >nul
if %errorlevel% equ 0 (
echo.
echo [ERROR] You provided a Shortcut (.lnk).
echo Please use the real python.exe.
goto ASK_USER
)
:FOUND_PYTHON
echo.
echo [INFO] Using Python: "!PY_EXE!"
REM Verify selected Python
"!PY_EXE!" --version >nul 2>&1
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Selected python path is invalid.
pause
exit /b 1
)
if not exist "%BACKEND_DIR%\requirements.txt" (
echo.
echo [CRITICAL ERROR] Missing backend\requirements.txt
pause
exit /b 1
)
if not exist "%BACKEND_DIR%\main.py" (
echo.
echo [CRITICAL ERROR] Missing backend\main.py
pause
exit /b 1
)
REM --- 2. Setup Env ---
if not exist "%VENV_PYTHON%" (
echo [INFO] Creating venv...
"!PY_EXE!" -m venv "%VENV_DIR%"
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Failed to create virtual environment.
pause
exit /b 1
)
set "FRESH_VENV=1"
)
if "%FRESH_VENV%"=="1" (
echo [INFO] Installing baseline dependencies...
"%VENV_PYTHON%" -m pip install --upgrade pip
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Failed to upgrade pip.
pause
exit /b 1
)
"%VENV_PYTHON%" -m pip install -r "%BACKEND_DIR%\requirements.txt"
if errorlevel 1 (
echo.
echo [WARN] Baseline install reported an error.
echo [WARN] Continuing into repair checks...
)
)
:CHECK_LIBS
echo.
echo [TEST] Checking libraries...
REM Create a temporary python script to avoid batch syntax errors
echo try: > "%TEMP_CHECK%"
echo import cv2 >> "%TEMP_CHECK%"
echo print(' - OpenCV: OK') >> "%TEMP_CHECK%"
echo import numpy >> "%TEMP_CHECK%"
echo print(' - NumPy: OK') >> "%TEMP_CHECK%"
echo import fastapi >> "%TEMP_CHECK%"
echo print(' - FastAPI: OK') >> "%TEMP_CHECK%"
echo import uvicorn >> "%TEMP_CHECK%"
echo print(' - Uvicorn: OK') >> "%TEMP_CHECK%"
echo import pandas >> "%TEMP_CHECK%"
echo print(' - Pandas: OK') >> "%TEMP_CHECK%"
echo import ncempy.io >> "%TEMP_CHECK%"
echo print(' - ncempy: OK') >> "%TEMP_CHECK%"
echo import openpyxl >> "%TEMP_CHECK%"
echo print(' - openpyxl: OK') >> "%TEMP_CHECK%"
echo import multipart >> "%TEMP_CHECK%"
echo print(' - python-multipart: OK') >> "%TEMP_CHECK%"
echo import tifffile >> "%TEMP_CHECK%"
echo print(' - tifffile: OK') >> "%TEMP_CHECK%"
echo import h5py >> "%TEMP_CHECK%"
echo print(' - h5py: OK') >> "%TEMP_CHECK%"
echo from skimage import measure >> "%TEMP_CHECK%"
echo print(' - scikit-image: OK') >> "%TEMP_CHECK%"
echo from scipy import ndimage >> "%TEMP_CHECK%"
echo print(' - SciPy: OK') >> "%TEMP_CHECK%"
echo from stardist.models import StarDist2D >> "%TEMP_CHECK%"
echo print(' - StarDist: OK') >> "%TEMP_CHECK%"
echo from csbdeep.utils import normalize >> "%TEMP_CHECK%"
echo print(' - csbdeep: OK') >> "%TEMP_CHECK%"
echo except Exception as e: >> "%TEMP_CHECK%"
echo print('\n [ERROR] ' + str(e)) >> "%TEMP_CHECK%"
echo raise SystemExit(1) >> "%TEMP_CHECK%"
REM Run the check
"%VENV_PYTHON%" "%TEMP_CHECK%"
set BUILD_STATUS=%errorlevel%
REM Clean up
if exist "%TEMP_CHECK%" del "%TEMP_CHECK%"
if %BUILD_STATUS% neq 0 (
if "%REPAIR_ATTEMPTED%"=="1" (
echo.
echo [CRITICAL ERROR] Repair was attempted, but the environment is still failing checks.
echo Review the error shown above for the package that still cannot import.
pause
exit /b 1
)
echo.
echo [CRITICAL ERROR] Libraries failed to load.
echo.
echo ==================================================
echo ATTEMPTING REPAIR
echo ==================================================
echo We will switch to Standard OpenCV to fix DLL errors.
echo.
pause
echo [REPAIR] upgrading pip...
"%VENV_PYTHON%" -m pip install --upgrade pip
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Failed to upgrade pip.
pause
exit /b 1
)
echo [REPAIR] Swapping OpenCV versions...
"%VENV_PYTHON%" -m pip uninstall -y opencv-python-headless opencv-python
if exist "%TEMP_REQ%" del "%TEMP_REQ%"
findstr /V /I "opencv-python-headless" "%BACKEND_DIR%\requirements.txt" > "%TEMP_REQ%"
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Failed to build a temporary requirements list.
pause
exit /b 1
)
echo [REPAIR] Installing non-OpenCV dependencies...
"%VENV_PYTHON%" -m pip install -r "%TEMP_REQ%"
if errorlevel 1 (
if exist "%TEMP_REQ%" del "%TEMP_REQ%"
echo.
echo [CRITICAL ERROR] Failed while reinstalling dependencies.
pause
exit /b 1
)
echo [REPAIR] Installing standard OpenCV...
"%VENV_PYTHON%" -m pip install opencv-python
if errorlevel 1 (
if exist "%TEMP_REQ%" del "%TEMP_REQ%"
echo.
echo [CRITICAL ERROR] Failed to install standard OpenCV.
pause
exit /b 1
)
if exist "%TEMP_REQ%" del "%TEMP_REQ%"
set "REPAIR_ATTEMPTED=1"
echo.
echo [REPAIR COMPLETE]
echo Checking again...
echo.
goto CHECK_LIBS
) else (
echo [SUCCESS] Libraries loaded correctly.
)
REM --- 3. Run Server ---
echo.
echo [INFO] Starting Server...
echo [INSTRUCTION] Open browser to: %APP_URL%
echo.
cd /d "%BACKEND_DIR%"
"%VENV_PYTHON%" -m uvicorn main:app --reload --host 127.0.0.1 --port 8501
pause