Skip to content

Instantly share code, notes, and snippets.

@spuranam
Forked from jacky9813/building-python3.11.md
Created April 22, 2023 17:14
Show Gist options
  • Save spuranam/b7d7f18d07b081df332ac875203956f6 to your computer and use it in GitHub Desktop.
Save spuranam/b7d7f18d07b081df332ac875203956f6 to your computer and use it in GitHub Desktop.

Building Python 3.11.0

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)

Table of Content

Debian 10, Debian 11, Ubuntu 18.04, Ubuntu 20.04

  • 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

CentOS 7

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

Alma Linux 8

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

Rocky Linux 9

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

openSUSE 15.3

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

Alpine Linux 3.16.2

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment