relax local install python requirement to 3.11

This commit is contained in:
jxxghp
2026-04-16 23:13:45 +08:00
parent e0e21e39a2
commit 810cb0a203
5 changed files with 167 additions and 81 deletions
+50 -44
View File
@@ -91,7 +91,7 @@ Usage:
Options:
deps:
--python PYTHON 用于创建虚拟环境的 Python 解释器
--python PYTHON 用于创建虚拟环境的 Python 解释器,默认自动选择本地 3.11+ 版本
--venv PATH 虚拟环境目录,默认 ./venv
--recreate 删除并重建虚拟环境
--config-dir PATH 指定配置目录
@@ -128,7 +128,7 @@ show_setup_help() {
Usage: moviepilot setup [OPTIONS]
Options:
--python PYTHON 用于创建虚拟环境的 Python 解释器
--python PYTHON 用于创建虚拟环境的 Python 解释器,默认自动选择本地 3.11+ 版本
--venv PATH 虚拟环境目录,默认 ./venv
--recreate 删除并重建虚拟环境
--frontend-version TAG 前端版本,默认 latest
@@ -152,7 +152,7 @@ Options:
--ref REF 后端 Git 版本,默认 latest
--frontend-version TAG 前端版本,默认 latest
--node-version VER 本地 Node 运行时版本,默认 20.12.1
--python PYTHON 用于安装后端依赖的 Python 解释器
--python PYTHON 用于安装后端依赖的 Python 解释器,默认自动选择本地 3.11+ 版本
--venv PATH 虚拟环境目录,默认 ./venv
--recreate 删除并重建虚拟环境
--skip-resources 更新 all 时跳过资源同步
@@ -179,39 +179,60 @@ python_version_ok() {
local python_bin="$1"
"$python_bin" - <<'PY' >/dev/null 2>&1
import sys
raise SystemExit(0 if sys.version_info >= (3, 12) else 1)
raise SystemExit(0 if sys.version_info >= (3, 11) else 1)
PY
}
try_python_candidate() {
local candidate="$1"
local python_path=""
python_path="$(command -v "$candidate" 2>/dev/null || true)"
if [ -n "$python_path" ] && python_version_ok "$python_path"; then
printf '%s\n' "$python_path"
return 0
fi
return 1
}
find_system_python() {
if command -v python3 >/dev/null 2>&1; then
local python3_bin
python3_bin="$(command -v python3)"
if python_version_ok "$python3_bin"; then
printf '%s\n' "$python3_bin"
return 0
fi
fi
if command -v python >/dev/null 2>&1; then
local python_bin
python_bin="$(command -v python)"
if python_version_ok "$python_bin"; then
printf '%s\n' "$python_bin"
return 0
fi
fi
local minor
local uv_bin
local uv_python
for minor in 20 19 18 17 16 15 14 13 12 11; do
if try_python_candidate "python3.$minor"; then
return 0
fi
done
if try_python_candidate python3; then
return 0
fi
if try_python_candidate python; then
return 0
fi
for uv_bin in "$(command -v uv 2>/dev/null || true)" "$HOME/.local/bin/uv"; do
if [ -n "$uv_bin" ] && [ -x "$uv_bin" ]; then
if "$uv_bin" python find 3.12 >/dev/null 2>&1; then
"$uv_bin" python find 3.12
return 0
fi
for minor in 20 19 18 17 16 15 14 13 12 11; do
uv_python="$("$uv_bin" python find "3.$minor" 2>/dev/null || true)"
if [ -n "$uv_python" ] && python_version_ok "$uv_python"; then
printf '%s\n' "$uv_python"
return 0
fi
done
fi
done
return 1
}
require_bootstrap_python() {
if [ -n "$BOOTSTRAP_PYTHON" ]; then
return 0
fi
echo "未找到可用的 Python 3.11+ 解释器,请先安装 Python 3.11 或更高版本" >&2
exit 1
}
default_config_dir() {
case "$(uname -s)" in
Darwin)
@@ -342,10 +363,7 @@ case "${1:-}" in
;;
install)
shift
if [ -z "$BOOTSTRAP_PYTHON" ]; then
echo "未找到可用的 Python 解释器,请先安装 Python 3" >&2
exit 1
fi
require_bootstrap_python
case "${1:-}" in
deps)
shift
@@ -367,34 +385,22 @@ case "${1:-}" in
;;
init)
shift
if [ -z "$BOOTSTRAP_PYTHON" ]; then
echo "未找到可用的 Python 解释器,请先安装 Python 3" >&2
exit 1
fi
require_bootstrap_python
exec "$BOOTSTRAP_PYTHON" "$SETUP_SCRIPT" init "$@"
;;
setup)
shift
if [ -z "$BOOTSTRAP_PYTHON" ]; then
echo "未找到可用的 Python 解释器,请先安装 Python 3" >&2
exit 1
fi
require_bootstrap_python
exec "$BOOTSTRAP_PYTHON" "$SETUP_SCRIPT" setup "$@"
;;
update)
shift
if [ -z "$BOOTSTRAP_PYTHON" ]; then
echo "未找到可用的 Python 解释器,请先安装 Python 3" >&2
exit 1
fi
require_bootstrap_python
exec "$BOOTSTRAP_PYTHON" "$SETUP_SCRIPT" update "$@"
;;
agent)
shift
if [ -z "$BOOTSTRAP_PYTHON" ]; then
echo "未找到可用的 Python 解释器,请先安装 Python 3" >&2
exit 1
fi
require_bootstrap_python
exec "$BOOTSTRAP_PYTHON" "$SETUP_SCRIPT" agent "$@"
;;
esac