diff --git a/misc/tools.func b/misc/tools.func index 341a82159..643229cc4 100644 --- a/misc/tools.func +++ b/misc/tools.func @@ -1068,17 +1068,23 @@ function setup_uv() { if [[ -n "$PYTHON_VERSION" ]]; then $STD msg_info "Ensuring Python $PYTHON_VERSION is available via uv..." - if ! uv python list | grep -q "cpython-${PYTHON_VERSION}-linux"; then - msg_error "Python version $PYTHON_VERSION not available via uv" + + FULL_PYTHON=$(uv python list | grep -E "^cpython-${PYTHON_VERSION//./\\.}\.[0-9]+-linux.*" | sort -V | tail -n1 | awk '{print $1}') + + if [[ -z "$FULL_PYTHON" ]]; then + msg_error "No matching Python $PYTHON_VERSION.x version found via uv" return 1 fi - if ! uv python list | grep -q "cpython-${PYTHON_VERSION}-linux.*.local/share/uv/python"; then - $STD uv python install "$PYTHON_VERSION" - msg_ok "Installed Python $PYTHON_VERSION via uv" + + # check if already installed + if uv python list | grep -q "$FULL_PYTHON.*uv/python"; then + $STD msg_ok "Python ${FULL_PYTHON#cpython-} already installed via uv" else - $STD msg_ok "Python $PYTHON_VERSION already installed via uv" + $STD uv python install "${FULL_PYTHON#cpython-}" + msg_ok "Installed Python ${FULL_PYTHON#cpython-} via uv" fi fi + } # ------------------------------------------------------------------------------