Files

152 lines
5.0 KiB
Bash
Raw Permalink Normal View History

2026-05-10 10:56:52 +08:00
#!/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