This commit is contained in:
CanbiZ 2025-06-05 14:18:00 +02:00
parent 7ebfebce74
commit 1fd87132c3
2 changed files with 31 additions and 33 deletions

View File

@ -35,8 +35,7 @@ cd /opt/sabnzbd
temp_file=$(mktemp)
curl -fsSL "https://github.com/sabnzbd/sabnzbd/releases/download/${RELEASE}/SABnzbd-${RELEASE}-src.tar.gz" -o "$temp_file"
tar -xzf "$temp_file" -C /opt/sabnzbd --strip-components=1
setup_uv VENV_FOLDER="/opt/sabnzbd/.venv" REQUIREMENTS_FILE="requirements.txt" PYTHON_VERSION="3.12" setup_uv_venv
VENV_FOLDER="/opt/sabnzbd/.venv" REQUIREMENTS_FILE="requirements.txt" PYTHON_VERSION="3.12" setup_uv_venv
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed SABnzbd"

View File

@ -1084,56 +1084,55 @@ function setup_uv() {
}
# ------------------------------------------------------------------------------
# Creates a uv-based venv with optional Python version and installs dependencies
# Fully autonomous uv-based venv installer with pip/requirements handling
# - Requires: VENV_FOLDER, PYTHON_VERSION
# - Optional: REQUIREMENTS_FILE (default: requirements.txt)
# ------------------------------------------------------------------------------
function setup_uv_venv() {
local VENV_FOLDER="${VENV_FOLDER:-/opt/app/.venv}"
local VENV_FOLDER="${VENV_FOLDER:?VENV_FOLDER not set}"
local PYTHON_VERSION="${PYTHON_VERSION:?PYTHON_VERSION not set}"
local REQUIREMENTS_FILE="${REQUIREMENTS_FILE:-requirements.txt}"
local ENABLE_PIP_UPGRADE="${ENABLE_PIP_UPGRADE:-1}"
local ENABLE_ENSUREPIP="${ENABLE_ENSUREPIP:-1}"
# Fallback auf globale PYTHON_VERSION
local PYTHON_VERSION="${PYTHON_VERSION:-}"
local PYTHON_BIN
setup_uv || return 1
# Wenn PYTHON_VERSION gesetzt, installiere gezielt
if [[ -n "$PYTHON_VERSION" ]]; then
export PYTHON_VERSION="$PYTHON_VERSION"
setup_uv || return 1
# Install Python via uv if not already available
local VERSION_MATCH
VERSION_MATCH=$(uv python list --only-downloads |
grep -E "^cpython-${PYTHON_VERSION//./\\.}\.[0-9]+-linux" |
cut -d'-' -f2 | sort -V | tail -n1)
if [[ -z "$VERSION_MATCH" ]]; then
msg_error "No matching Python $PYTHON_VERSION.x version found via uv"
return 1
fi
if ! uv python list | grep -q "cpython-${VERSION_MATCH}-linux.*uv/python"; then
$STD msg_info "Installing Python $VERSION_MATCH via uv"
$STD uv python install "$VERSION_MATCH" || {
msg_error "Failed to install Python $VERSION_MATCH via uv"
return 1
}
fi
$STD msg_info "Creating uv venv in $VENV_FOLDER"
if ! $STD uv venv "$VENV_FOLDER"; then
if ! $STD uv venv "$VENV_FOLDER" --python "$VERSION_MATCH"; then
msg_error "Failed to create uv venv"
return 1
fi
local PYTHON="$VENV_FOLDER/bin/python"
PYTHON_BIN="$VENV_FOLDER/bin/python"
if [[ "$ENABLE_ENSUREPIP" == "1" ]]; then
$STD msg_info "Running ensurepip"
if ! $STD "$PYTHON" -m ensurepip --upgrade; then
msg_error "ensurepip failed"
return 1
fi
fi
$STD msg_info "Running ensurepip"
$STD "$PYTHON_BIN" -m ensurepip --upgrade || return 1
if [[ "$ENABLE_PIP_UPGRADE" == "1" ]]; then
$STD msg_info "Upgrading pip"
if ! $STD "$PYTHON" -m pip install --upgrade pip; then
msg_error "pip upgrade failed"
return 1
fi
fi
$STD msg_info "Upgrading pip"
$STD "$PYTHON_BIN" -m pip install --upgrade pip || return 1
if [[ -f "$REQUIREMENTS_FILE" ]]; then
$STD msg_info "Installing requirements from $REQUIREMENTS_FILE"
if ! $STD "$PYTHON" -m pip install -r "$REQUIREMENTS_FILE"; then
msg_error "Failed to install requirements"
return 1
fi
$STD "$PYTHON_BIN" -m pip install -r "$REQUIREMENTS_FILE" || return 1
else
msg_info "No requirements file found at $REQUIREMENTS_FILE skipping"
fi