#!/usr/bin/env bash # install_uv # ---------- # Instala uv — gestor de paquetes Python ultra-rápido escrito en Rust. # Usa el instalador oficial de astral.sh. Configura PATH en ~/.bashrc y ~/.zshrc. # # USO: # source install_uv.sh # install_uv install_uv() { echo "Instalando uv (gestor de paquetes Python)..." echo "" # Verificar si uv ya está instalado if command -v uv &>/dev/null; then local current_version current_version="$(uv --version 2>/dev/null || echo "desconocida")" echo "uv ya está instalado (versión: ${current_version})." return 0 fi # Verificar curl if ! command -v curl &>/dev/null; then echo "install_uv: curl no está instalado (requerido)" >&2 echo " Instálalo con: sudo apt install curl" >&2 return 1 fi echo "Descargando e instalando uv (instalador oficial astral.sh)..." if ! curl -LsSf https://astral.sh/uv/install.sh | sh; then echo "install_uv: falló la instalación de uv" >&2 echo " Verifica tu conexión a internet y permisos" >&2 return 1 fi echo "" # Configurar PATH en ~/.bashrc if ! grep -q ".cargo/bin" "$HOME/.bashrc" 2>/dev/null; then { echo "" echo "# uv and cargo binaries" echo 'export PATH="$HOME/.cargo/bin:$PATH"' } >> "$HOME/.bashrc" echo "PATH añadido a ~/.bashrc" else echo "PATH ya configurado en ~/.bashrc" fi # Configurar PATH en ~/.zshrc si existe if [[ -f "$HOME/.zshrc" ]]; then if ! grep -q ".cargo/bin" "$HOME/.zshrc" 2>/dev/null; then { echo "" echo "# uv and cargo binaries" echo 'export PATH="$HOME/.cargo/bin:$PATH"' } >> "$HOME/.zshrc" echo "PATH añadido a ~/.zshrc" fi fi # Cargar PATH en la sesión actual export PATH="$HOME/.cargo/bin:$PATH" echo "" # Verificar instalación if ! command -v uv &>/dev/null; then echo "uv instalado pero no está en el PATH actual." echo " Ejecuta: source ~/.bashrc (o abre una nueva terminal)" else local installed_version installed_version="$(uv --version)" echo "uv instalado correctamente: ${installed_version}" fi echo "" echo "Comandos útiles de uv:" echo " uv venv - Crear entorno virtual" echo " uv pip install - Instalar paquete" echo " uv pip sync requirements.txt - Sincronizar dependencias" } # Ejecutar si se invoca directamente if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then install_uv "$@" fi