#!/bin/bash # ============================================================= # deploy_uv.sh - uv (Python 包管理工具) 一键安装与配置脚本 # ============================================================= # 适用系统: Ubuntu 20.04+ # 功能: 安装 uv、配置国内镜像源加速 # 说明: 先将安装脚本下载到本地再执行,避免管道问题; # 如果官方源慢,自动切 GitHub Release 镜像。 # ============================================================= set -e echo "========================================" echo " 开始部署 uv - Python 包管理工具" echo "========================================" # ---------- 1. 安装 uv ---------- install_uv() { echo "[1/4] 正在安装 uv..." # 先将安装脚本下载到 /tmp(而非管道直接执行) echo " 正在下载安装脚本..." # 尝试从官方源下载(带超时) if timeout 30 curl -fsSL https://astral.sh/uv/install.sh -o /tmp/uv-install.sh 2>/dev/null; then echo " 下载源: https://astral.sh/uv/install.sh" else # 官方源超时,换 GitHub Release(国内 CDN 更快) echo " 官方源下载超时,尝试 GitHub Release..." UV_VERSION=$(curl -fsSL https://api.github.com/repos/astral-sh/uv/releases/latest 2>/dev/null | grep '"tag_name"' | cut -d'"' -f4) if [ -z "$UV_VERSION" ]; then UV_VERSION="0.6.14" # fallback 固定版本 fi echo " 正在下载 uv ${UV_VERSION} 预编译包..." curl -fsSL "https://github.com/astral-sh/uv/releases/download/${UV_VERSION}/uv-${UV_VERSION}-x86_64-unknown-linux-gnu.tar.gz" -o /tmp/uv.tar.gz # 解压并安装 mkdir -p /tmp/uv-extract tar xzf /tmp/uv.tar.gz -C /tmp/uv-extract cp /tmp/uv-extract/uv-${UV_VERSION}-x86_64-unknown-linux-gnu/uv /tmp/uv-install-dir/ 2>/dev/null || true # 直接复制到 local/bin mkdir -p "$HOME/.local/bin" cp /tmp/uv-extract/uv-${UV_VERSION}-x86_64-unknown-linux-gnu/uv "$HOME/.local/bin/uv" chmod +x "$HOME/.local/bin/uv" ln -sf "$HOME/.local/bin/uv" "$HOME/.local/bin/uvx" 2>/dev/null || true rm -rf /tmp/uv.tar.gz /tmp/uv-extract echo "✅ uv 安装成功(来自 GitHub Release)!" return 0 fi # 执行安装脚本 echo " 正在执行安装..." bash /tmp/uv-install.sh rm -f /tmp/uv-install.sh if [ $? -ne 0 ]; then echo "❌ uv 安装失败,请检查网络连接后重试。" exit 1 fi echo "✅ uv 安装成功!" } # ---------- 2. 配置环境变量 ---------- setup_env() { echo "[2/4] 正在配置环境变量..." # 检测 shell 并添加 uv 到 PATH SHELL_CONFIG="" if [ -n "$BASH_VERSION" ]; then SHELL_CONFIG="$HOME/.bashrc" elif [ -n "$ZSH_VERSION" ]; then SHELL_CONFIG="$HOME/.zshrc" else SHELL_CONFIG="$HOME/.profile" fi # 如果 PATH 中还没有 uv 路径,则添加 if ! echo "$PATH" | grep -q "$HOME/.local/bin"; then echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$SHELL_CONFIG" echo "已添加到 $SHELL_CONFIG" else echo "$HOME/.local/bin 已在 PATH 中" fi # 临时生效 export PATH="$HOME/.local/bin:$PATH" echo "✅ 环境变量配置完成!" } # ---------- 3. 创建 uv 配置文件(换源) ---------- config_mirror() { echo "[3/4] 正在配置国内镜像源(加速下载)..." CONFIG_DIR="$HOME/.config/uv" CONFIG_FILE="$CONFIG_DIR/uv.toml" mkdir -p "$CONFIG_DIR" cat > "$CONFIG_FILE" << 'EOF' # uv 全局配置 - 使用国内镜像源加速 # Python 版本下载镜像源(提高 `uv python install` 速度) python-install-mirror = "https://registry.npmmirror.com/-/binary/python-build-standalone/" # pip 包下载镜像源(提高 `uv pip install` 速度) [[index]] url = "https://mirrors.aliyun.com/pypi/simple/" default = true EOF echo "配置文件已创建: $CONFIG_FILE" echo "✅ 镜像源配置完成!" } # ---------- 4. 验证安装 ---------- verify_install() { echo "[4/4] 正在验证安装..." if command -v uv &> /dev/null; then UV_VER=$(uv --version) echo "✅ uv 版本: $UV_VER" else echo "❌ uv 命令未找到,请重启终端或执行: source ~/.bashrc" exit 1 fi if command -v uvx &> /dev/null; then echo "✅ uvx 已安装(用于运行工具包)" fi echo "" echo "========================================" echo " 🎉 uv 部署完成!" echo "========================================" echo "" echo "快速上手:" echo " uv python install 3.12 # 安装 Python 3.12" echo " uv venv # 创建虚拟环境" echo " uv pip install requests # 安装包" echo " uv run main.py # 运行脚本" echo "" echo "重启终端或执行: source $SHELL_CONFIG" } # ---------- 主流程 ---------- install_uv setup_env config_mirror verify_install