Files
YG_FT_Platform/request/setup.sh
DESKTOP-72TV0V4\caoxiaozhu bda8f13446 1. 增加了请求框架
2. 增加了删除虚拟环境的脚本
2026-01-12 14:20:44 +08:00

300 lines
10 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# 永远从脚本所在目录运行(避免在别的目录执行导致 requirements/.env/venv 路径错误)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# 函数:加载 .env 文件中的变量
load_env_file() {
local env_file=".env"
if [ -f "$env_file" ]; then
while IFS='=' read -r key value; do
# 跳过注释和空行
[[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue
# 移除值两端的引号(如果有)
value=$(echo "$value" | sed 's/^["'\'']//' | sed 's/["'\'']$//')
# 导出变量
export "$key=$value"
done < "$env_file"
fi
}
echo "🔧 X-Request 框架环境设置"
echo "=========================="
# 检查当前操作系统
# 首先检查是否是Windows环境
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || "$OSTYPE" == "win32" ]]; then
OS_TYPE="Windows"
PYTHON_CMD="python"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
OS_TYPE="Linux"
PYTHON_CMD="python3"
elif [[ "$OSTYPE" == "darwin"* ]]; then
OS_TYPE="macOS"
PYTHON_CMD="python3"
else
# 使用uname作为后备检测
OS_TYPE="$(uname -s)"
if [[ "$OS_TYPE" == *"Windows"* || "$OS_TYPE" == "MSYS"* || "$OS_TYPE" == "MINGW"* ]]; then
OS_TYPE="Windows"
PYTHON_CMD="python"
else
PYTHON_CMD="python3"
fi
fi
# 额外检查是否在Windows PowerShell或CMD中运行
if [[ "$SHELL" == *"powershell"* || "$SHELL" == *"cmd.exe"* ]]; then
OS_TYPE="Windows"
PYTHON_CMD="python"
fi
# 检查是否存在python.exe文件Windows特有
if [[ -f "$(which python.exe 2>/dev/null)" ]]; then
OS_TYPE="Windows"
PYTHON_CMD="python.exe"
fi
echo "📋 检测到操作系统: $OS_TYPE"
echo "📋 使用Python命令: $PYTHON_CMD"
# 检查Python版本
echo "📋 检查Python版本..."
python_version=$($PYTHON_CMD --version 2>&1 | grep -Po '(?<=Python )\d+\.\d+')
if [ -z "$python_version" ]; then
python_version=$($PYTHON_CMD --version 2>&1 | awk '{print $2}' | cut -d'.' -f1,2)
fi
echo "✅ 发现Python: $python_version"
# 简单的版本比较不需要bc命令
major_version=$(echo $python_version | cut -d'.' -f1)
minor_version=$(echo $python_version | cut -d'.' -f2)
if [ "$major_version" -lt 3 ] || ([ "$major_version" -eq 3 ] && [ "$minor_version" -lt 8 ]); then
echo "❌ 需要 Python 3.8 或更高版本,当前版本: $python_version"
exit 1
fi
echo "✅ Python版本检查通过"
# 检查虚拟环境是否存在且完整
VENV_COMPLETE=false
if [ -d "xrequest" ]; then
# 检查激活脚本是否存在
if [ -f "xrequest/Scripts/activate" ] || [ -f "xrequest/bin/activate" ]; then
echo "✅ 虚拟环境已存在且完整"
VENV_COMPLETE=true
else
echo "⚠️ 虚拟环境存在但不完整,删除并重新创建..."
rm -rf xrequest
fi
fi
# 如果虚拟环境不存在或不完整,创建新的虚拟环境
if [ "$VENV_COMPLETE" = false ]; then
echo "📦 创建虚拟环境..."
# 根据操作系统类型选择不同的虚拟环境创建方式
if [ "$OS_TYPE" = "Windows" ]; then
# 在Windows上使用python -m venv
$PYTHON_CMD -m venv xrequest
if [ $? -eq 0 ]; then
# 检查虚拟环境是否创建成功
if [ -f "xrequest/Scripts/activate" ]; then
echo "✅ 虚拟环境创建完成"
else
echo "⚠️ 虚拟环境创建可能失败尝试使用pip创建..."
# 如果venv创建失败尝试使用pip安装virtualenv并创建虚拟环境
$PYTHON_CMD -m pip install --user virtualenv
$PYTHON_CMD -m virtualenv xrequest
if [ $? -eq 0 ]; then
if [ -f "xrequest/Scripts/activate" ]; then
echo "✅ 虚拟环境创建完成使用virtualenv"
else
echo "❌ 虚拟环境创建失败,请手动创建虚拟环境"
echo " 手动创建方法:"
echo " 1. 安装virtualenvpip install virtualenv"
echo " 2. 创建虚拟环境virtualenv xrequest"
echo " 3. 激活虚拟环境xrequest/Scripts/activate"
echo " 4. 安装依赖pip install -r requirements.txt"
fi
else
echo "❌ 虚拟环境创建失败,请手动创建虚拟环境"
echo " 手动创建方法:"
echo " 1. 安装virtualenvpip install virtualenv"
echo " 2. 创建虚拟环境virtualenv xrequest"
echo " 3. 激活虚拟环境xrequest/Scripts/activate"
echo " 4. 安装依赖pip install -r requirements.txt"
fi
fi
else
echo "❌ 虚拟环境创建失败,请手动创建虚拟环境"
echo " 手动创建方法:"
echo " 1. 安装virtualenvpip install virtualenv"
echo " 2. 创建虚拟环境virtualenv xrequest"
echo " 3. 激活虚拟环境xrequest/Scripts/activate"
echo " 4. 安装依赖pip install -r requirements.txt"
fi
else
# 在Linux/Mac上使用python3 -m venv
$PYTHON_CMD -m venv xrequest
if [ $? -eq 0 ]; then
# 检查虚拟环境是否创建成功
if [ -f "xrequest/bin/activate" ]; then
echo "✅ 虚拟环境创建完成"
else
echo "⚠️ 虚拟环境创建可能失败尝试使用pip创建..."
# 如果venv创建失败尝试使用pip安装virtualenv并创建虚拟环境
$PYTHON_CMD -m pip install --user virtualenv
$PYTHON_CMD -m virtualenv xrequest
if [ $? -eq 0 ]; then
if [ -f "xrequest/bin/activate" ]; then
echo "✅ 虚拟环境创建完成使用virtualenv"
else
echo "❌ 虚拟环境创建失败,请手动创建虚拟环境"
echo " 手动创建方法:"
echo " 1. 安装virtualenvpip install virtualenv"
echo " 2. 创建虚拟环境virtualenv xrequest"
echo " 3. 激活虚拟环境source xrequest/bin/activate"
echo " 4. 安装依赖pip install -r requirements.txt"
fi
else
echo "❌ 虚拟环境创建失败,请手动创建虚拟环境"
echo " 手动创建方法:"
echo " 1. 安装virtualenvpip install virtualenv"
echo " 2. 创建虚拟环境virtualenv xrequest"
echo " 3. 激活虚拟环境source xrequest/bin/activate"
echo " 4. 安装依赖pip install -r requirements.txt"
fi
fi
else
echo "❌ 虚拟环境创建失败,请手动创建虚拟环境"
echo " 在Linux上您可能需要先安装python3-venv包"
echo " sudo apt install python3.12-venv" # 针对Ubuntu/Debian系统
echo " 或者:"
echo " 1. 安装virtualenvpip install virtualenv"
echo " 2. 创建虚拟环境virtualenv xrequest"
echo " 3. 激活虚拟环境source xrequest/bin/activate"
echo " 4. 安装依赖pip install -r requirements.txt"
fi
fi
fi
# 确定激活脚本路径
# 检查是否存在 Windows 风格的激活脚本
if [ -f "xrequest/Scripts/activate" ]; then
ACTIVATE_SCRIPT="xrequest/Scripts/activate"
echo "📋 使用 Windows 风格的激活脚本: $ACTIVATE_SCRIPT"
elif [ -f "xrequest/bin/activate" ]; then
ACTIVATE_SCRIPT="xrequest/bin/activate"
echo "📋 使用 Linux/Mac 风格的激活脚本: $ACTIVATE_SCRIPT"
else
ACTIVATE_SCRIPT=""
echo "⚠️ 未找到激活脚本"
fi
# 安装依赖(强制使用虚拟环境里的 python -m pip不要因为 curl 检测失败而跳过安装)
echo "📦 安装依赖包..."
VENV_PY=""
if [ -f "xrequest/Scripts/python.exe" ]; then
VENV_PY="xrequest/Scripts/python.exe"
elif [ -f "xrequest/bin/python" ]; then
VENV_PY="xrequest/bin/python"
fi
if [ -z "$VENV_PY" ]; then
echo "❌ 未找到虚拟环境 Python无法安装依赖。请先确保虚拟环境创建成功。"
exit 1
fi
echo "📋 使用虚拟环境 Python: $VENV_PY"
echo " 📦 升级 pip/setuptools/wheel..."
$VENV_PY -m pip install --upgrade pip setuptools wheel
echo " 📚 使用 requirements.txt 安装所有依赖..."
$VENV_PY -m pip install -r requirements.txt
echo " 🔎 校验关键依赖..."
$VENV_PY -c "import uvicorn, fastapi; print('OK: uvicorn/fastapi installed')"
echo "✅ 依赖安装完成!"
# 加载 .env 文件中的变量
echo "📄 加载环境配置..."
load_env_file
# 创建日志目录(使用 .env 中的 LOGS_DIR 配置)
echo "📁 创建日志目录..."
mkdir -p "${LOGS_DIR:-logs}"
# 检查是否存在.env文件如果不存在则创建
if [ ! -f ".env" ]; then
echo "📄 创建环境配置文件..."
if [ -f ".env.example" ]; then
cp .env.example .env
echo "✅ 已从 .env.example 创建 .env 文件,可根据需要修改配置"
else
# 如果没有示例文件,创建一个基本的.env文件
cat > .env << EOF
# 应用配置
APP_NAME="X-Request API Framework"
APP_VERSION="1.0.0"
DEBUG=false
# 服务器配置
HOST="0.0.0.0"
PORT=1111
WORKERS=1
# 日志配置
LOG_LEVEL="INFO"
LOG_FILE="logs/app.log"
LOG_FORMAT="json"
LOG_TO_CONSOLE=false
# 高级日志配置
ADVANCED_LOGGING=true
LOGS_DIR="logs"
MAX_LOG_DAYS=30
ENABLE_LOG_CLEANUP=true
ROUTE_BASED_LOGGING=true
# 性能配置
MAX_REQUESTS=1000
MAX_CONNECTIONS=1000
REQUEST_TIMEOUT=30
# CORS配置
CORS_ORIGINS=["*"]
CORS_METHODS=["*"]
CORS_HEADERS=["*"]
EOF
echo "✅ 已创建基本的 .env 文件,可根据需要修改配置"
fi
fi
echo ""
echo "🎉 环境设置完成!"
echo ""
echo "🚀 启动方法:"
echo " ./start.sh"
echo " 或者:"
echo " source xrequest/bin/activate && python main.py"
echo ""
echo "📚 API文档地址:"
echo " http://localhost:${PORT:-3000}/docs"
echo "🏥 健康检查:"
echo " http://localhost:${PORT:-3000}/health"
echo ""
echo ""