#!/usr/bin/env bash set -euo pipefail TARGET_VERSION="${1:-3.11}" IFS="." read -r PYTHON_MAJOR PYTHON_MINOR _ <<< "${TARGET_VERSION}" if [[ -n "${PYTHON_MINOR:-}" ]]; then PYTHON_BIN="python${PYTHON_MAJOR}.${PYTHON_MINOR}" else PYTHON_BIN="python${PYTHON_MAJOR}" fi if command -v "${PYTHON_BIN}" >/dev/null 2>&1; then command -v "${PYTHON_BIN}" exit 0 fi APT_RUNNER=() if [[ "$(id -u)" -ne 0 ]]; then APT_RUNNER=(sudo) fi export DEBIAN_FRONTEND=noninteractive "${APT_RUNNER[@]}" apt-get update >&2 if ! "${APT_RUNNER[@]}" apt-get install -y "${PYTHON_BIN}" "${PYTHON_BIN}-venv" >&2; then "${APT_RUNNER[@]}" apt-get install -y software-properties-common >&2 "${APT_RUNNER[@]}" add-apt-repository -y ppa:deadsnakes/ppa >&2 "${APT_RUNNER[@]}" apt-get update >&2 "${APT_RUNNER[@]}" apt-get install -y "${PYTHON_BIN}" "${PYTHON_BIN}-venv" >&2 fi command -v "${PYTHON_BIN}"