The following scripts has been tested in clean environment, the official image for each distro in Docker Hub to be exact.
The dependencies doesn't change much, so Python 3.10 may have the exact same process. (Obviously the link and the filename in the script must be changed)
- Debian 10, Debian 11, Ubuntu 18.04, Ubuntu 20.04
- CentOS 7
- AlmaLinux 8
- Rocky Linux 9
- openSUSE 15.3
- Alpine Linux 3.16.2
- Note: _dbm module is not available.
- Note: For Ubuntu 18.04 with both packages tk-dev (8.6.0+9) and tk8.6-dev (8.6.8-4) installed, _tkinter module is refused to compile for unknown reason. (TBH, I didn't dig into this problem)
sudo apt update
sudo apt install -y libncurses-dev libbz2-dev libgdbm-dev liblzma-dev libssl-dev tk-dev uuid-dev libreadline-dev libsqlite3-dev libffi-dev gcc make automake wget
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xvf Python-3.11.0.tgz
cd Python-3.11.0
./configure --enable-loadable-sqlite-extensions
make -j$(nproc)
sudo make altinstall
The script should work with RHEL7 based systems.
- Note: _tkinter module is not available because Python 3.11 requires tk 8.6, while package tk-devel is using tk 8.5.
# Hats off to Yebolin https://github.com/pyenv/pyenv/issues/2416#issuecomment-1207579730
# openssl11-devel is in epel
sudo yum install -y epel-release
sudo yum install -y ncurses-devel bzip2-devel gdbm-devel libnsl2-devel xz-devel libuuid-devel readline-devel sqlite-devel libffi-devel openssl11-devel gcc make automake wget perl-core pkgconfig
export CFLAGS="$CFLAGS $(pkg-config --cflags openssl11)"
export LDFLAGS="$LDFLAGS $(pkg-config --libs openssl11)"
cd ~
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xvf Python-3.11.0.tgz
cd Python-3.11.0
./configure --enable-loadable-sqlite-extensions
make -j$(nproc)
sudo make altinstall
The script should work in RHEL8 based systems.
# libnsl2-devel in PowerTools for Alma Linux 8
sudo dnf install -y 'dnf-command(config-manager)'
sudo dnf config-manager --set-enabled powertools
sudo dnf install -y ncurses-devel bzip2-devel gdbm-devel libnsl2-devel xz-devel openssl-devel tk-devel libuuid-devel readline-devel sqlite-devel libffi-devel gcc make automake wget
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xvf Python-3.11.0.tgz
cd Python-3.11.0
./configure --enable-loadable-sqlite-extensions
make -j$(nproc)
sudo make altinstall
The script should work in RHEL9 based systems.
# gdbm-devel and libnsl2-devel in CRB for Rocky Linux 9
sudo dnf install -y 'dnf-command(config-manager)'
sudo dnf config-manager --set-enabled crb
sudo dnf install -y ncurses-devel bzip2-devel gdbm-devel libnsl2-devel xz-devel openssl-devel tk-devel libuuid-devel readline-devel sqlite-devel libffi-devel gcc make automake wget
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xvf Python-3.11.0.tgz
cd Python-3.11.0
./configure --enable-loadable-sqlite-extensions
make -j$(nproc)
sudo make altinstall
sudo zypper install -y ncurses-devel libbz2-devel gdbm-devel libnsl-devel xz-devel libopenssl-3-devel tk-devel libuuid-devel readline-devel sqlite3-devel libffi-devel gcc make automake wget tar gzip
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xvf Python-3.11.0.tgz
cd Python-3.11.0
./configure --enable-loadable-sqlite-extensions
make -j$(nproc)
sudo make altinstall
apk add musl-dev ncurses-dev bzip2-dev gdbm-dev libnsl-dev xz-dev openssl3-dev tk-dev libuuid readline-dev sqlite-dev libffi-dev gcc make automake wget tar gzip
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xvf Python-3.11.0.tgz
cd Python-3.11.0
./configure --enable-loadable-sqlite-extensions
make -j$(nproc)
make altinstall