#!/usr/bin/env bash # ============================================================================= # OmniShopAgent - CentOS 8 环境准备脚本 # 准备 Python 3.12、Docker、依赖及虚拟环境 # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" VENV_DIR="${VENV_DIR:-$PROJECT_ROOT/venv}" PYTHON_VERSION="${PYTHON_VERSION:-3.12}" echo "==========================================" echo "OmniShopAgent - CentOS 8 环境准备" echo "==========================================" echo "项目目录: $PROJECT_ROOT" echo "虚拟环境: $VENV_DIR" echo "Python 版本: $PYTHON_VERSION" echo "==========================================" # ----------------------------------------------------------------------------- # 1. 安装系统依赖 # ----------------------------------------------------------------------------- echo "[1/4] 安装系统依赖..." sudo dnf install -y \ gcc \ gcc-c++ \ make \ openssl-devel \ bzip2-devel \ libffi-devel \ sqlite-devel \ xz-devel \ zlib-devel \ readline-devel \ tk-devel \ libuuid-devel \ curl \ wget \ git \ tar # ----------------------------------------------------------------------------- # 2. 检查 Docker(可选) # ----------------------------------------------------------------------------- echo "[2/4] 检查 Docker..." if ! command -v docker &>/dev/null; then echo " 安装 Docker..." sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 2>/dev/null || { sudo dnf install -y dnf-plugins-core sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo } sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker sudo systemctl start docker sudo usermod -aG docker "$USER" 2>/dev/null || true echo " Docker 已安装。请执行 'newgrp docker' 或重新登录以使用 docker 命令。" else echo " Docker 已安装: $(docker --version)" fi # ----------------------------------------------------------------------------- # 3. 安装 Python 3.12 # ----------------------------------------------------------------------------- echo "[3/4] 安装 Python $PYTHON_VERSION..." USE_CONDA=false if command -v python3.12 &>/dev/null; then echo " Python 3.12 已安装" elif command -v conda &>/dev/null; then echo " 使用 conda 创建 Python $PYTHON_VERSION 环境..." conda create -n shop_agent "python=$PYTHON_VERSION" -y USE_CONDA=true echo " Conda 环境已创建。请执行: conda activate shop_agent" echo " 然后手动执行: pip install -r $PROJECT_ROOT/requirements.txt" echo " 跳过 venv 创建..." else echo " 从源码编译 Python $PYTHON_VERSION..." sudo dnf groupinstall -y 'Development Tools' cd /tmp PY_URL="https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.0.tgz" PY_TGZ="Python-${PYTHON_VERSION}.0.tgz" [ -f "$PY_TGZ" ] || wget -q "$PY_URL" -O "$PY_TGZ" tar xzf "$PY_TGZ" cd "Python-${PYTHON_VERSION}.0" ./configure --enable-optimizations --prefix=/usr/local make -j "$(nproc)" sudo make altinstall cd /tmp rm -rf "Python-${PYTHON_VERSION}.0" "$PY_TGZ" fi # ----------------------------------------------------------------------------- # 4. 创建虚拟环境并安装依赖(非 conda 时) # ----------------------------------------------------------------------------- if [ "$USE_CONDA" = true ]; then echo "[4/4] 已使用 conda,跳过 venv 创建" else echo "[4/4] 创建虚拟环境与安装 Python 依赖..." PYTHON_BIN="" for p in python3.12 python3.11 python3; do if command -v "$p" &>/dev/null; then VER=$("$p" -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")' 2>/dev/null || echo "0") if [[ "$VER" == "3.1"* ]] || [[ "$VER" == "3.12"* ]]; then PYTHON_BIN="$p" break fi fi done if [ -z "$PYTHON_BIN" ]; then echo " 错误: 未找到 Python 3.10+。若使用 conda,请先执行: conda activate shop_agent" echo " 然后手动执行: pip install -r $PROJECT_ROOT/requirements.txt" exit 1 fi if [ ! -d "$VENV_DIR" ]; then echo " 创建虚拟环境: $VENV_DIR" "$PYTHON_BIN" -m venv "$VENV_DIR" fi echo " 激活虚拟环境并安装依赖..." set +u source "$VENV_DIR/bin/activate" set -u pip install -U pip pip install -r "$PROJECT_ROOT/requirements.txt" echo " Python 依赖安装完成。" fi # 配置 .env if [ ! -f "$PROJECT_ROOT/.env" ]; then echo "" echo " 创建 .env 配置文件..." cp "$PROJECT_ROOT/.env.example" "$PROJECT_ROOT/.env" echo " 请编辑 $PROJECT_ROOT/.env 配置 OPENAI_API_KEY 等参数。" fi echo "" echo "==========================================" echo "环境准备完成!" echo "==========================================" echo "下一步:" echo " 1. 编辑 .env 配置 OPENAI_API_KEY、SEARCH_API_BASE_URL 等" echo " 2. (可选)下载数据: python scripts/download_dataset.py" echo " 3. 启动应用: ./scripts/start.sh" echo "" echo "激活虚拟环境: source $VENV_DIR/bin/activate" echo "=========================================="