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 <noreply@anthropic.com>
This commit is contained in:
James Smith
2026-07-07 14:15:59 +01:00
parent 456404a266
commit a6edaa73d1
+24 -3
View File
@@ -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"