152 lines
5.0 KiB
Bash
152 lines
5.0 KiB
Bash
#!/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
|