From a6edaa73d1e2273829658613d6d60e9edf960e44 Mon Sep 17 00:00:00 2001 From: James Smith Date: Tue, 7 Jul 2026 14:15:59 +0100 Subject: [PATCH] fix: prevent ~/.local package pollution breaking health check Install step now uses --ignore-installed for core packages so pip always puts them in the venv, even when they already exist in ~/.local (user site-packages). Without this, pip skips the venv install and the health check fails because it runs with 'python -s' which excludes ~/.local. Health check now attempts a silent auto-fix before reporting failure, and if the fix also fails, shows the exact command to resolve it rather than a bare error message. Co-Authored-By: Claude Sonnet 4.6 --- setup.sh | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/setup.sh b/setup.sh index 3d4db49..5b6a478 100755 --- a/setup.sh +++ b/setup.sh @@ -561,7 +561,11 @@ install_python_deps() { progress "Installing Python dependencies" info "Installing core packages..." - $PIP install $PIP_OPTS "flask>=3.0.0" "flask-wtf>=1.2.0" "flask-compress>=1.15" \ + # --ignore-installed forces packages into the venv even if they already + # exist in ~/.local (user site-packages). Without this, pip sees them as + # satisfied and skips the venv install, causing the health check to fail + # because it runs with 'python -s' which excludes ~/.local. + $PIP install $PIP_OPTS --ignore-installed "flask>=3.0.0" "flask-wtf>=1.2.0" "flask-compress>=1.15" \ "flask-limiter>=2.5.4" "requests>=2.28.0" \ "Werkzeug>=3.1.5" "pyserial>=3.5" || true @@ -2081,8 +2085,25 @@ do_health_check() { ok "Critical Python packages (flask, requests, flask-compress, flask-wtf) — OK" ((pass++)) || true else - fail "Critical Python packages missing in venv" - ((fails++)) || true + # Packages may be in ~/.local instead of the venv (pip skipped the venv + # install if it found them already satisfied in user site-packages). + # Attempt a silent fix before reporting failure. + warn "Core packages not in venv — attempting auto-fix..." + if venv/bin/pip install --quiet --ignore-installed \ + "flask>=3.0.0" "flask-wtf>=1.2.0" "flask-compress>=1.15" \ + "flask-limiter>=2.5.4" "requests>=2.28.0" "Werkzeug>=3.1.5" 2>/dev/null \ + && venv/bin/python -s -c "import flask; import requests; import flask_compress; import flask_wtf" 2>/dev/null; then + ok "Critical Python packages — fixed automatically" + ((pass++)) || true + else + fail "Critical Python packages missing in venv" + echo "" + echo " This usually means packages are installed in ~/.local but not the venv." + echo " Fix with:" + echo " venv/bin/pip install --ignore-installed flask flask-wtf flask-compress flask-limiter requests" + echo "" + ((fails++)) || true + fi fi else fail "Python venv not found — run Install first"