benchmark/setup.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
check_command() {
if ! command -v $1 &> /dev/null; then
echo "[-] $1 not found. Please install it."
exit 1
fi
}
spinner() {
local pid=$1
local msg=$2
local delay=0.2
local spin='-\|/'
while kill -0 "$pid" 2>/dev/null; do
for i in {0..3}; do
printf "\r[%c] %s" "${spin:$i:1}" "$msg"
sleep $delay
done
done
printf "\r"
}
upgrade_pip() {
local LOG_FILE="upgrade_pip.log"
pip install --upgrade pip > "$LOG_FILE" 2>&1 &
local upgrade_pip=$!
spinner "$upgrade_pip" "Upgrading pip..."
wait "$upgrade_pip"
local exit_code=$?
if [ "$exit_code" -ne 0 ]; then
echo "[-] Upgrading pip failed (exit code $exit_code). See below for the output."
cat "$LOG_FILE"
exit "$exit_code"
fi
echo "[+] Pip upgraded successfully"
rm -f "$LOG_FILE"
}
install_deps() {
local LOG_FILE="pip_install.log"
# 1) Run pip in the background, capture its PID
# (sending all pip output to /dev/null)
pip install -r requirements.txt > "$LOG_FILE" 2>&1 &
local pip_pid=$!
# 2) Call spinner on that PID
spinner "$pip_pid" "Installing dependencies..."
# 3) Wait for pip to finish, capture exit code
wait "$pip_pid"
local exit_code=$?
# 4) If pip failed, handle it
if [ "$exit_code" -ne 0 ]; then
echo "[-] Installation failed. See below for pip output."
cat "$LOG_FILE"
exit "$exit_code"
fi
echo "[+] Dependencies installed successfully!"
rm -f "$LOG_FILE"
}
# Check whether python3 exists, otherwise fall back to python
if command -v python3 &>/dev/null; then
PYTHON_CMD="python3"
elif command -v python &>/dev/null; then
PYTHON_CMD="python"
else
echo "[-] No Python interpreter found! Aborting."
exit 1
fi
REQUIRED_VERSION="3"
INSTALLED_VERSION=$($PYTHON_CMD -c 'import sys; print(f"{sys.version_info.major}")')
# Compare installed python vs. required:
if (( $(echo "$INSTALLED_VERSION < $REQUIRED_VERSION" | bc -l) )); then
echo "[-] Python $REQUIRED_VERSION is required. You have $INSTALLED_VERSION. Aborting."
exit 1
fi
check_command pip
# 1) Check if script is inside a venv
if [ -z "$VIRTUAL_ENV" ]; then
echo "[*] Checking status of virtual environment..."
if [ -d "venv" ]; then
echo "[*] 'venv' folder already exists. Skipping creation."
else
echo "[+] Creating virtual environment in 'venv'..."
$PYTHON_CMD -m venv venv
fi
source venv/bin/activate
else
echo "[+] Detected virtual environment: $VIRTUAL_ENV"
fi
# 2) Upgrade pip
upgrade_pip
# 3) Install dependencies
install_deps
echo "[+] Setup complete. You can activate virtual environment with 'source venv/bin/{activate_script}."
echo " To deactivate, run: deactivate"