From 1fd87132c3ea5e6646101097c1f41b083facec1d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 5 Jun 2025 14:18:00 +0200 Subject: [PATCH] test --- install/sabnzbd-install.sh | 3 +- misc/tools.func | 61 +++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/install/sabnzbd-install.sh b/install/sabnzbd-install.sh index ede6f1375..47daebd70 100644 --- a/install/sabnzbd-install.sh +++ b/install/sabnzbd-install.sh @@ -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" diff --git a/misc/tools.func b/misc/tools.func index 81d8d9d9e..cda282629 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -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