File size: 2,394 Bytes
a4b377d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash
set -e

apt update -y || { echo "apt update failed"; exit 1; }
apt upgrade -y || { echo "apt upgrade failed"; exit 1; }

apt install -y software-properties-common wget build-essential \
    zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev \
    libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev

if [ -x "$(command -v add-apt-repository)" ]; then
    echo "Adding Python PPA repository (deadsnakes)..."
    add-apt-repository -y ppa:deadsnakes/ppa || { echo "Failed to add Python PPA repository"; exit 1; }
fi

apt update -y
if apt install -y python3.12 python3.12-venv python3.12-dev; then
    echo "--------------------------------------"
    echo "Python 3.12 successfully installed from repositories."
    echo "--------------------------------------"
    python3.12 --version
else
    echo "Python 3.12 not available in repositories, installing from source."
    PYTHON_VERSION="3.12.0"
    PYTHON_SRC="https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz"
    wget "$PYTHON_SRC" -O /tmp/Python-$PYTHON_VERSION.tgz
    cd /tmp
    tar -xf Python-$PYTHON_VERSION.tgz
    cd Python-$PYTHON_VERSION
    ./configure --enable-optimizations
    CPU_CORES=$(nproc || echo 1)
    make -j"$CPU_CORES" || { echo "Compilation failed"; exit 1; }
    make altinstall || { echo "Make altinstall failed"; exit 1; }
fi

python3.12 --version

if command -v python3.12 >/dev/null 2>&1; then
    echo "Installing pip for Python 3.12..."
    curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12 || { echo "pip installation failed"; exit 1; }
    echo "pip successfully installed."
else
    echo "Python 3.12 not found, skipping pip installation."
    exit 1
fi

cd ~
if [ -d /tmp/Python-$PYTHON_VERSION ]; then
    echo "Removing temporary files..."
    rm -rf /tmp/Python-$PYTHON_VERSION
fi

rm -f /tmp/Python-$PYTHON_VERSION.tgz 2>/dev/null || true

echo "--------------------------------------"
echo "Python 3.12 and pip installation completed successfully."
echo "--------------------------------------"

apt-get install -y python3-venv || true
apt-get install -y python3.12-venv || true
apt-get install -y libgl1-mesa-glx || true

echo "--------------------------------------"
echo "All done! The extra packages have been attempted."
echo "If any failed, the script will have continued anyway."
echo "--------------------------------------"