The following should work with just about any version of Python. I am using it to compile, currently 3.10.x, on distros where those packages are not readily available for installation. The following is a quick how to on getting it compiled under both RedHat/CentOS/Almalinux and Debian based systems.
Download the Tarball for the Version You Want To Install
Download the tar.gz
archive for the version that you want to install from here. Verify the download and then save the path to this file for later.
Install Dependencies
This assumes that you already have the “build-essentials” and kernel headers installed on the box, which is an exercise for the reader.
RedHat/CentOS/Almalinux
yum install -y bzip2-devel expat-devel gdbm-devel ncurses-devel openssl-devel readline-devel wget sqlite-devel tk-devel xz-devel zlib-devel libffi-devel gmp-devel libmpc-devel mpfr-devel openssl-devel liblzma-devel
Debian
apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev liblzma-dev
Compile Python
The following enables a non-root user to unpack, compile, and install it into their home directory. Copy this file to /var/tmp/compile-python.sh
and then run as follows
/var/tmp/compile-python.sh <path-to-tarball>
#!/bin/bash
set -u
set -e
# The path to the downloaded tarball
py_tarball=$1
export PY_DIR=$(echo $py_tarball | awk -F/ '{ print $NF }' | sed 's/.tgz//')
export PY_PREFIX=$(echo ~/usr/local/$PY_DIR | tr [:upper:] [:lower:])
mkdir -p ~/usr/local/src ~/usr/local/bin ~/usr/local/include $PY_PREFIX
rm -rf $PY_PREFIX
tar -xzf $py_tarball -C ~/usr/local/src/
cd ~/usr/local/src/$PY_DIR
./configure --prefix=$PY_PREFIX --exec-prefix=$PY_PREFIX
make && make install
Add the following to your PATH in ~/.bash_profile
PYTHON_HOME=~/usr/local/python-<version>
export PATH=$PATH:$PYTHON_HOME/bin