sp-hydra-veil-core/lib/steps/python_env.sh

69 lines
No EOL
1.9 KiB
Bash

#!/bin/bash
# lib/steps/python_env.sh — venv + pip install editable
step_python_env() {
print_section "Python Environment"
log_step "Virtual environment + dependencies" 3 $TOTAL_STEPS
_create_venv
_pip_install
}
_create_venv() {
if [ -d "$HV_VENV" ]; then
log_warn "venv ya existe: ${HV_VENV}"
if ask_confirm "Recrear venv?"; then
rm -rf "$HV_VENV"
else
log_skip "venv existente conservado"
source "$HV_VENV/bin/activate"
return 0
fi
fi
start_spinner "Creando virtual environment (${PYTHON_BIN})..."
"$PYTHON_BIN" -m venv "$HV_VENV"
stop_spinner "venv creado → ${HV_VENV}"
source "$HV_VENV/bin/activate"
start_spinner "Actualizando pip..."
pip install --quiet --upgrade pip
stop_spinner "pip actualizado"
}
_pip_install() {
source "$HV_VENV/bin/activate"
# Fix: la GUI puede pedir core==2.3.4 pero core puede ser 2.3.x
if [ -f "$HV_GUI/pyproject.toml" ]; then
sed -i 's/sp-hydra-veil-core == [0-9.]*/sp-hydra-veil-core >= 2.3.0/' \
"$HV_GUI/pyproject.toml" 2>/dev/null || true
fi
# Orden de instalación: dependencias primero
for name in essentials core cli gui; do
local dir
case "$name" in
essentials) dir="$HV_ESSENTIALS" ;;
core) dir="$HV_CORE" ;;
cli) dir="$HV_CLI" ;;
gui) dir="$HV_GUI" ;;
esac
if [ ! -d "$dir" ]; then
log_warn "${name} no encontrado en ${dir} — omitiendo"
continue
fi
start_spinner "Instalando ${name} (editable)..."
if pip install --quiet -e "$dir" 2>/tmp/pip_err_${name}; then
stop_spinner "${name} instalado"
else
stop_spinner
log_error "pip install falló para ${name}:"
tail -5 /tmp/pip_err_${name}
exit 1
fi
done
}