#!/usr/bin/env bash set -euo pipefail REPO_ROOT="$(cd "$(dirname "$0")"/.. && pwd)" BACKEND_DIR="$REPO_ROOT/backend" VENV_DIR="$REPO_ROOT/.venv" PYTHON_BIN="python3" # Allow override: USE_SYSTEM_PYTHON=1 to skip venv USE_SYSTEM_PYTHON="${USE_SYSTEM_PYTHON:-0}" # CLEAN=1 to recreate venv CLEAN="${CLEAN:-0}" echo "[backend] repo: $REPO_ROOT" echo "[backend] dir: $BACKEND_DIR" echo "[backend] checking Python..." if command -v python3 >/dev/null 2>&1; then PYTHON_BIN="$(command -v python3)" elif command -v python >/dev/null 2>&1; then PYTHON_BIN="$(command -v python)" else echo "[backend] ERROR: python3/python not found" >&2 exit 1 fi echo "[backend] python: $PYTHON_BIN ($("$PYTHON_BIN" -V))" if [[ "$USE_SYSTEM_PYTHON" == "1" ]]; then echo "[backend] using system Python (no venv)" else if [[ "$CLEAN" == "1" && -d "$VENV_DIR" ]]; then echo "[backend] CLEAN=1 -> removing existing venv: $VENV_DIR" rm -rf "$VENV_DIR" fi if [[ ! -d "$VENV_DIR" ]]; then echo "[backend] creating venv: $VENV_DIR" "$PYTHON_BIN" -m venv "$VENV_DIR" fi # Activate venv # shellcheck disable=SC1091 source "$VENV_DIR/bin/activate" echo "[backend] venv activated: $VIRTUAL_ENV" echo "[backend] upgrading pip/setuptools/wheel" python -m pip install --upgrade pip setuptools wheel fi REQ_FILE="$BACKEND_DIR/requirements.txt" if [[ ! -f "$REQ_FILE" ]]; then echo "[backend] ERROR: requirements.txt not found at $REQ_FILE" >&2 exit 1 fi echo "[backend] installing requirements: $REQ_FILE" pip install -r "$REQ_FILE" # Show versions echo "[backend] python version: $(python -V)" echo "[backend] pip version: $(python -m pip -V)" if command -v uvicorn >/dev/null 2>&1; then echo "[backend] uvicorn version: $(python -c 'import uvicorn,sys; print(uvicorn.__version__)' || echo unknown)" else echo "[backend] uvicorn not found; you may need it for dev server" fi echo "[backend] setup completed."