更新
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
# 共用:解析可用 Python(必须 3.10+ 且带 SSL,跳过宝塔坏环境)
|
||||
_py_ok() {
|
||||
local py="$1"
|
||||
[ -n "$py" ] && [ -x "$py" ] || return 1
|
||||
"$py" -c "import sys, ssl; sys.exit(0 if sys.version_info>=(3,10) else 1)" 2>/dev/null
|
||||
}
|
||||
|
||||
resolve_python() {
|
||||
local backend="${1:?}"
|
||||
local root="${2:-$(cd "$backend/.." && pwd)}"
|
||||
local py="" candidate ver_dir
|
||||
|
||||
# 不 source 宝塔环境,避免 PATH 被坏 Python 污染
|
||||
local -a candidates=()
|
||||
|
||||
candidates+=("$backend/.venv/bin/python")
|
||||
candidates+=("/usr/local/python3.11/bin/python3.11")
|
||||
candidates+=("/usr/local/python3.10/bin/python3.10")
|
||||
candidates+=("/usr/bin/python3.11")
|
||||
candidates+=("/usr/bin/python3.10")
|
||||
candidates+=("/usr/local/bin/python3.11")
|
||||
candidates+=("/usr/local/bin/python3.10")
|
||||
|
||||
# 动态扫描宝塔 Python(不写死版本号)
|
||||
for base in \
|
||||
/home/www/server/pyporject_evn/versions \
|
||||
/www/server/pyporject_evn/versions \
|
||||
/www/server/panel/pyenv/versions; do
|
||||
[ -d "$base" ] || continue
|
||||
for ver_dir in $(ls -d "$base"/* 2>/dev/null | sort -V -r); do
|
||||
for name in python3.11 python3.10 python3 python; do
|
||||
candidates+=("$ver_dir/bin/$name")
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
candidates+=("$(command -v python3.11 2>/dev/null || true)")
|
||||
candidates+=("$(command -v python3.10 2>/dev/null || true)")
|
||||
candidates+=("$(command -v python3 2>/dev/null || true)")
|
||||
candidates+=("$(command -v python 2>/dev/null || true)")
|
||||
|
||||
declare -A seen=()
|
||||
for candidate in "${candidates[@]}"; do
|
||||
[ -n "$candidate" ] || continue
|
||||
[ -n "${seen[$candidate]:-}" ] && continue
|
||||
seen[$candidate]=1
|
||||
if _py_ok "$candidate"; then
|
||||
py="$candidate"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$py" ]; then
|
||||
echo "[错误] 未找到带 SSL 的 Python 3.10+。" >&2
|
||||
echo " 宝塔当前 Python 缺 _ssl,请执行:" >&2
|
||||
echo " AUTO_BUILD_PYTHON=1 bash $root/install.sh" >&2
|
||||
echo " 然后: KEFU_PYTHON=/usr/local/python3.11/bin/python3.11 bash $backend/baota_fix.sh" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "$py"
|
||||
}
|
||||
|
||||
ensure_uvicorn() {
|
||||
local py="${1:?}"
|
||||
local backend="${2:?}"
|
||||
if "$py" -c "import uvicorn" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
if ! "$py" -c "import ssl" 2>/dev/null; then
|
||||
echo "[错误] $py 无 SSL,无法 pip install" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "[修复] 正在安装 Python 依赖..." >&2
|
||||
"$py" -m pip install -U pip -q
|
||||
"$py" -m pip install -r "$backend/requirements.txt"
|
||||
}
|
||||
Reference in New Issue
Block a user