94efefc7bf
10 funciones Bash del dominio infra: instaladores de herramientas de desarrollo (install_go, install_nodejs, install_pnpm, install_python312, install_uv, install_volta, install_wails), diagnostico del sistema (analyze_disk_space, detect_wsl, list_listening_ports). Automatizan la configuracion del entorno de desarrollo en Linux/WSL.
137 lines
4.6 KiB
Bash
137 lines
4.6 KiB
Bash
#!/usr/bin/env bash
|
|
# install_python312
|
|
# -----------------
|
|
# Instala Python 3.12 en Linux detectando la distribución automáticamente.
|
|
# - Ubuntu/Debian/Pop/Mint/Elementary: usa deadsnakes PPA
|
|
# - Fedora/RHEL/CentOS: usa dnf
|
|
# - Arch/Manjaro: usa pacman
|
|
# Instala también python3.12-venv, python3.12-dev y verifica pip.
|
|
#
|
|
# USO:
|
|
# source install_python312.sh
|
|
# install_python312
|
|
|
|
install_python312() {
|
|
echo "Instalando Python 3.12..."
|
|
echo ""
|
|
|
|
# Detectar distribución
|
|
local distro="unknown"
|
|
if [[ -f /etc/os-release ]]; then
|
|
# shellcheck disable=SC1091
|
|
distro="$(. /etc/os-release && echo "${ID:-unknown}")"
|
|
echo "Distribución detectada: ${distro}"
|
|
else
|
|
echo "install_python312: no se pudo detectar la distribución" >&2
|
|
fi
|
|
echo ""
|
|
|
|
# Verificar si Python 3.12 ya está instalado
|
|
if command -v python3.12 &>/dev/null; then
|
|
local current_version
|
|
current_version="$(python3.12 --version 2>&1)"
|
|
echo "Python 3.12 ya está instalado: ${current_version}"
|
|
return 0
|
|
fi
|
|
|
|
case "$distro" in
|
|
ubuntu|debian|pop|mint|elementary)
|
|
echo "Instalando Python 3.12 usando deadsnakes PPA..."
|
|
echo ""
|
|
|
|
echo "Actualizando repositorios..."
|
|
if ! sudo apt update; then
|
|
echo "install_python312: falló la actualización de repositorios" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo "Verificando software-properties-common..."
|
|
if ! dpkg -l 2>/dev/null | grep -q software-properties-common; then
|
|
if ! sudo apt install -y software-properties-common; then
|
|
echo "install_python312: falló la instalación de software-properties-common" >&2
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
echo "Añadiendo deadsnakes PPA..."
|
|
if ! sudo add-apt-repository -y ppa:deadsnakes/ppa; then
|
|
echo "install_python312: falló al añadir deadsnakes PPA" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo "Actualizando lista de paquetes..."
|
|
if ! sudo apt update; then
|
|
echo "install_python312: falló la actualización después de añadir PPA" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo "Instalando Python 3.12 y herramientas..."
|
|
if ! sudo apt install -y python3.12 python3.12-venv python3.12-dev python3-pip; then
|
|
echo "install_python312: falló la instalación de Python 3.12" >&2
|
|
return 1
|
|
fi
|
|
;;
|
|
|
|
fedora|rhel|centos)
|
|
echo "Instalando Python 3.12 usando dnf..."
|
|
if ! sudo dnf install -y python3.12 python3.12-devel; then
|
|
echo "install_python312: falló la instalación con dnf" >&2
|
|
return 1
|
|
fi
|
|
;;
|
|
|
|
arch|manjaro)
|
|
echo "Instalando Python 3.12 usando pacman..."
|
|
if ! sudo pacman -S --noconfirm python; then
|
|
echo "install_python312: falló la instalación con pacman" >&2
|
|
return 1
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
echo "install_python312: distribución no soportada automáticamente: ${distro}" >&2
|
|
echo " Opciones manuales:" >&2
|
|
echo " - Compilar desde fuente: https://www.python.org/downloads/" >&2
|
|
echo " - Usar pyenv: curl https://pyenv.run | bash" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
|
|
# Verificar instalación
|
|
if ! command -v python3.12 &>/dev/null; then
|
|
echo "install_python312: Python 3.12 no está disponible después de la instalación" >&2
|
|
echo " Puede que necesites reiniciar la terminal" >&2
|
|
return 1
|
|
fi
|
|
|
|
local installed_version
|
|
installed_version="$(python3.12 --version 2>&1)"
|
|
echo "Python 3.12 instalado correctamente: ${installed_version}"
|
|
echo ""
|
|
|
|
# Verificar pip
|
|
echo "Verificando pip para Python 3.12..."
|
|
if ! python3.12 -m pip --version &>/dev/null; then
|
|
echo "pip no disponible, instalando..."
|
|
if ! python3.12 -m ensurepip --upgrade; then
|
|
echo " Instala pip manualmente: curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12"
|
|
else
|
|
echo "pip instalado para Python 3.12"
|
|
fi
|
|
else
|
|
echo "pip disponible para Python 3.12"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Comandos útiles:"
|
|
echo " python3.12 -m venv .venv - Crear entorno virtual"
|
|
echo " source .venv/bin/activate - Activar entorno"
|
|
}
|
|
|
|
# Ejecutar si se invoca directamente
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
install_python312 "$@"
|
|
fi
|