fix: 启动脚本绑定 venv Python + 缺依赖自动安装

- start.bat: 改用 .venv\Scripts\python.exe,缺依赖时自动 pip install
- start.sh: 优先 .venv/bin/python3,fallback 到系统 python3/python
- 两个脚本均不再依赖 uv,使用标准 python -m venv + pip

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
AskaEth
2026-06-13 21:01:33 +08:00
parent ead7d2056b
commit 1301aeb9b7
2 changed files with 42 additions and 18 deletions
+17 -10
View File
@@ -11,8 +11,10 @@ echo.
set PASS=0 set PASS=0
set FAIL=0 set FAIL=0
:: ── Python ── :: ── Python (venv) ──
python --version >nul 2>&1 set PYTHON=%~dp0.venv\Scripts\python.exe
if not exist "%PYTHON%" (echo [FAIL] .venv 未创建,请先运行: python -m venv .venv ^&^& .venv\Scripts\pip install -r requirements.txt & pause & exit /b 1)
"%PYTHON%" --version >nul 2>&1
if %errorlevel% equ 0 ( if %errorlevel% equ 0 (
echo [OK] Python echo [OK] Python
set /a PASS+=1 set /a PASS+=1
@@ -22,22 +24,22 @@ if %errorlevel% equ 0 (
) )
:: ── Python 依赖 ── :: ── Python 依赖 ──
python -c "import aiohttp" >nul 2>&1 "%PYTHON%" -c "import aiohttp" >nul 2>&1
if %errorlevel% equ 0 (echo [OK] aiohttp& set /a PASS+=1) else (echo [FAIL] aiohttp 缺失& set /a FAIL+=1) if %errorlevel% equ 0 (echo [OK] aiohttp& set /a PASS+=1) else (echo [FAIL] aiohttp 缺失& set /a FAIL+=1)
python -c "import yaml" >nul 2>&1 "%PYTHON%" -c "import yaml" >nul 2>&1
if %errorlevel% equ 0 (echo [OK] PyYAML& set /a PASS+=1) else (echo [FAIL] PyYAML 缺失& set /a FAIL+=1) if %errorlevel% equ 0 (echo [OK] PyYAML& set /a PASS+=1) else (echo [FAIL] PyYAML 缺失& set /a FAIL+=1)
python -c "import textual" >nul 2>&1 "%PYTHON%" -c "import textual" >nul 2>&1
if %errorlevel% equ 0 (echo [OK] Textual& set /a PASS+=1) else (echo [FAIL] Textual 缺失& set /a FAIL+=1) if %errorlevel% equ 0 (echo [OK] Textual& set /a PASS+=1) else (echo [FAIL] Textual 缺失& set /a FAIL+=1)
python -c "import watchdog" >nul 2>&1 "%PYTHON%" -c "import watchdog" >nul 2>&1
if %errorlevel% equ 0 (echo [OK] watchdog& set /a PASS+=1) else (echo [FAIL] watchdog 缺失& set /a FAIL+=1) if %errorlevel% equ 0 (echo [OK] watchdog& set /a PASS+=1) else (echo [FAIL] watchdog 缺失& set /a FAIL+=1)
python -c "import psutil" >nul 2>&1 "%PYTHON%" -c "import psutil" >nul 2>&1
if %errorlevel% equ 0 (echo [OK] psutil& set /a PASS+=1) else (echo [FAIL] psutil 缺失& set /a FAIL+=1) if %errorlevel% equ 0 (echo [OK] psutil& set /a PASS+=1) else (echo [FAIL] psutil 缺失& set /a FAIL+=1)
python -c "import rich" >nul 2>&1 "%PYTHON%" -c "import rich" >nul 2>&1
if %errorlevel% equ 0 (echo [OK] rich& set /a PASS+=1) else (echo [FAIL] rich 缺失& set /a FAIL+=1) if %errorlevel% equ 0 (echo [OK] rich& set /a PASS+=1) else (echo [FAIL] rich 缺失& set /a FAIL+=1)
:: ── 配置文件 ── :: ── 配置文件 ──
@@ -55,9 +57,14 @@ if exist "config\framework\base_config.yaml" (
echo. echo.
if %FAIL% gtr 0 ( if %FAIL% gtr 0 (
echo [FAIL] %FAIL% 项缺失,请先安装: pip install -r requirements.txt echo [WARN] %FAIL% 项缺失,自动安装...
"%PYTHON%" -m pip install -r requirements.txt
if %errorlevel% neq 0 (
echo [FAIL] 安装失败,请手动执行: .venv\Scripts\pip install -r requirements.txt
pause pause
exit /b 1 exit /b 1
)
echo [OK] 依赖安装完成
) )
echo [OK] 所有依赖就绪 (%PASS% 项) echo [OK] 所有依赖就绪 (%PASS% 项)
@@ -66,6 +73,6 @@ echo 🚀 启动 SenSu (无头模式)...
echo Web 面板: http://0.0.0.0:4200/SenSu echo Web 面板: http://0.0.0.0:4200/SenSu
echo. echo.
python main.py --headless "%PYTHON%" main.py --headless
pause pause
+22 -5
View File
@@ -6,11 +6,22 @@ set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR" cd "$SCRIPT_DIR"
# ── Python 路径: 优先 venv ──
if [ -f "$SCRIPT_DIR/.venv/bin/python3" ]; then
PYTHON="$SCRIPT_DIR/.venv/bin/python3"
elif [ -f "$SCRIPT_DIR/.venv/bin/python" ]; then
PYTHON="$SCRIPT_DIR/.venv/bin/python"
elif command -v python3 &>/dev/null; then
PYTHON="python3"
else
PYTHON="python"
fi
# ── 颜色 ── # ── 颜色 ──
RED='\033[31m'; GREEN='\033[32m'; YELLOW='\033[33m'; NC='\033[0m' RED='\033[31m'; GREEN='\033[32m'; YELLOW='\033[33m'; NC='\033[0m'
pass=0; fail=0 pass=0; fail=0
check() { check() {
if command -v "$1" &>/dev/null || python3 -c "$2" 2>/dev/null; then if command -v "$1" &>/dev/null || "$PYTHON" -c "$2" 2>/dev/null; then
echo -e " ${GREEN}${NC} $3" echo -e " ${GREEN}${NC} $3"
pass=$((pass+1)) pass=$((pass+1))
else else
@@ -23,8 +34,8 @@ echo "🐱 SenSu 依赖检测..."
echo "" echo ""
# ── 系统依赖 ── # ── 系统依赖 ──
check "python3" "" "Python 3.11+" check "" "" "Python 3.11+"
python3 -c "import sys; assert sys.version_info >= (3,11)" 2>/dev/null || { "$PYTHON" -c "import sys; assert sys.version_info >= (3,11)" 2>/dev/null || {
echo -e " ${YELLOW}⚠ Python 版本过低,需要 3.11+${NC}" echo -e " ${YELLOW}⚠ Python 版本过低,需要 3.11+${NC}"
fail=$((fail+1)) fail=$((fail+1))
} }
@@ -36,6 +47,7 @@ check "" "import textual" "Textual (TUI)"
check "" "import watchdog" "watchdog (热重载)" check "" "import watchdog" "watchdog (热重载)"
check "" "import psutil" "psutil (系统监控)" check "" "import psutil" "psutil (系统监控)"
check "" "import rich" "rich (终端美化)" check "" "import rich" "rich (终端美化)"
check "" "import websockets" "websockets (WebSocket)"
# ── 配置文件 ── # ── 配置文件 ──
if [ -f "config/framework/base_config.yaml" ]; then if [ -f "config/framework/base_config.yaml" ]; then
@@ -52,8 +64,13 @@ fi
echo "" echo ""
if [ "$fail" -gt 0 ]; then if [ "$fail" -gt 0 ]; then
echo -e "${RED} $fail 项缺失,请先安装: pip install -r requirements.txt${NC}" echo -e "${YELLOW} $fail 项缺失,自动安装...${NC}"
"$PYTHON" -m pip install -r requirements.txt
if [ $? -ne 0 ]; then
echo -e "${RED}❌ 安装失败,请手动执行: python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt${NC}"
exit 1 exit 1
fi
echo -e "${GREEN}✅ 依赖安装完成${NC}"
fi fi
echo -e "${GREEN}✅ 所有依赖就绪 ($pass 项)${NC}" echo -e "${GREEN}✅ 所有依赖就绪 ($pass 项)${NC}"
@@ -62,4 +79,4 @@ echo "🚀 启动 SenSu (无头模式)..."
echo " Web 面板: http://0.0.0.0:4200/SenSu" echo " Web 面板: http://0.0.0.0:4200/SenSu"
echo "" echo ""
python3 main.py --headless "$PYTHON" main.py --headless