This commit is contained in:
sushen339
2025-10-20 13:05:18 +08:00
parent 4087febb98
commit a8e33cf5fc
+89 -19
View File
@@ -11,7 +11,7 @@ readonly SCRIPT_NAME="JdCkup Installer"
readonly REPO_URL="https://github.com/icepage/AutoUpdateJdCookie.git"
readonly PROJECT_DIR="AutoUpdateJdCookie"
readonly VENV_NAME="jdckup_env"
readonly PYTHON_VERSION="python3.13"
PYTHON_CMD="" # 动态检测的 Python 命令
LOG_FILE="jdckup_install_$(date +%Y%m%d_%H%M%S).log"
readonly LOG_FILE
@@ -60,6 +60,31 @@ check_result() {
# 安装函数
# ============================================
# 检测可用的 Python 版本
detect_python_version() {
log_info "检测系统 Python 版本..."
# 按优先级检测 Python 版本
local python_candidates=("python3.13" "python3.12" "python3.11" "python3.10" "python3.9" "python3")
for py_cmd in "${python_candidates[@]}"; do
if command_exists "$py_cmd"; then
local py_version
py_version=$($py_cmd --version 2>&1 | grep -oP '\d+\.\d+')
# Python 3.8+ 支持
if [[ $(echo "$py_version >= 3.8" | bc -l 2>/dev/null || echo "1") -eq 1 ]]; then
PYTHON_CMD="$py_cmd"
log_success "检测到 Python: $py_cmd (版本 $py_version)"
return 0
fi
fi
done
log_error "未找到可用的 Python 3.8+ 版本"
exit 1
}
# 检查系统依赖
check_system_dependencies() {
log_info "检查系统依赖..."
@@ -87,13 +112,6 @@ check_system_dependencies() {
install_system_packages() {
log_info "开始安装系统包..."
local packages=(
"python3.13-venv"
"git"
"python3-pip"
"python3-opencv"
)
# 更新包列表
log_info "更新包列表..."
apt update || {
@@ -101,14 +119,49 @@ install_system_packages() {
exit 1
}
# 安装
log_info "安装必要的系统包: ${packages[*]}"
apt install -y "${packages[@]}" 2>&1 | tee -a "$LOG_FILE"
check_result "系统包安装失败"
# 基础包列表(不包含 venv,按需安装
local base_packages=(
"git"
"python3-pip"
)
# 可选包(安装失败不影响)
local optional_packages=(
"python3-opencv"
)
# 安装基础包
log_info "安装必要的系统包: ${base_packages[*]}"
apt install -y "${base_packages[@]}" 2>&1 | tee -a "$LOG_FILE"
check_result "基础系统包安装失败"
# 尝试安装可选包
log_info "尝试安装可选包: ${optional_packages[*]}"
for pkg in "${optional_packages[@]}"; do
if apt install -y "$pkg" 2>&1 | tee -a "$LOG_FILE"; then
log_success "已安装: $pkg"
else
log_warning "跳过可选包: $pkg (可能不可用)"
fi
done
log_success "系统包安装完成"
}
# 安装 venv 包(仅在需要时)
install_venv_package() {
log_info "检测到缺少 venv 模块,尝试安装..."
# 尝试安装 python3-venv
if apt install -y python3-venv 2>&1 | tee -a "../$LOG_FILE"; then
log_success "python3-venv 安装成功"
return 0
else
log_error "python3-venv 安装失败,请手动安装"
return 1
fi
}
# 克隆代码仓库
clone_repository() {
log_info "克隆代码仓库..."
@@ -141,9 +194,9 @@ setup_virtual_environment() {
exit 1
}
# 检查 Python 版本
if ! command_exists "$PYTHON_VERSION"; then
log_error "$PYTHON_VERSION 未安装或不在 PATH 中"
# 检查 Python 命令
if [ -z "$PYTHON_CMD" ] || ! command_exists "$PYTHON_CMD"; then
log_error "Python 命令不可用: $PYTHON_CMD"
exit 1
fi
@@ -153,11 +206,27 @@ setup_virtual_environment() {
rm -rf "$VENV_NAME"
fi
log_info "创建虚拟环境..."
"$PYTHON_VERSION" -m venv "$VENV_NAME" 2>&1 | tee -a "../$LOG_FILE"
check_result "创建虚拟环境失败"
log_info "使用 $PYTHON_CMD 创建虚拟环境..."
log_success "虚拟环境创建完成"
# 尝试创建虚拟环境
if "$PYTHON_CMD" -m venv "$VENV_NAME" 2>&1 | tee -a "../$LOG_FILE"; then
log_success "虚拟环境创建完成"
else
log_warning "虚拟环境创建失败,可能缺少 venv 模块"
# 尝试安装 venv 包
install_venv_package || {
log_error "无法安装 venv 模块"
exit 1
}
# 再次尝试创建虚拟环境
log_info "重新尝试创建虚拟环境..."
"$PYTHON_CMD" -m venv "$VENV_NAME" 2>&1 | tee -a "../$LOG_FILE"
check_result "创建虚拟环境失败(已安装 venv 模块)"
log_success "虚拟环境创建完成"
fi
}
# 安装 Python 依赖
@@ -257,6 +326,7 @@ main() {
# 执行安装步骤
check_system_dependencies
detect_python_version
install_system_packages
clone_repository
setup_virtual_environment