CM / fast_python_install.sh
EQX55's picture
Upload fast_python_install.sh
a4b377d verified
#!/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 "--------------------------------------"