Python
3.14.10
Install CPython 3.14.10 under $CEUADMIN/python/3.14.10 using GCC 12.5.0, OpenSSL 3.3.0-dev, SQLite 3.49.2 and libffi 3.4.2.
#!/bin/bash
set -euo pipefail
module load ceuadmin/gcc/12.5.0
module load libffi/3.4.2/gcc/alfpockh
module load openssl/3.3.0-dev
module load ceuadmin/sqlite/3.49.2
V=3.14.10
PREFIX="$CEUADMIN/python/$V"
curl -fL "https://www.python.org/ftp/python/$V/Python-$V.tar.xz" \
-o "Python-$V.tar.xz"
tar -xf "Python-$V.tar.xz"
cd "Python-$V"
./configure \
--prefix="$PREFIX" \
--enable-optimizations \
--with-lto \
--enable-shared \
--with-ensurepip=install
make -j5
make install
cd "$PREFIX/bin"
ln -sf python3.14 python
ln -sf python3.14 python3
"$PREFIX/bin/python" --version
"$PREFIX/bin/python" -c \
"import ssl, sqlite3, ctypes; print('OpenSSL:', ssl.OPENSSL_VERSION); print('SQLite:', sqlite3.sqlite_version); print('Python build OK')"
echo "Python $V installed successfully: $PREFIX"
The initial lengthy attempt is as follows.
#!/bin/bash -l
set -euo pipefail
module load ceuadmin/gcc/12.5.0
module load ceuadmin/gcc/12.5.0
module load libffi/3.4.2/gcc/alfpockh
module load openssl/3.3.0-dev
module load ceuadmin/sqlite/3.49.2
V=3.14.10
PREFIX="$CEUADMIN/python/$V"
OPENSSL=/usr/local/Cluster-Apps/openssl/3.2.1
SQLITE=/usr/local/Cluster-Apps/ceuadmin/sqlite/3.49.2
LIBFFI=/usr/local/software/spack/spack-views/rocky8-icelake-20220710/libffi-3.4.2/gcc-11.3.0/alfpockhsgmv5vzwjg474kaaestxs7fa
mkdir -p "$HOME/.local/pkgconfig/openssl"
for f in openssl libssl libcrypto; do
sed -e "s|/usr/local/lib64|$OPENSSL/lib64|g" \
-e "s|/usr/local/include|$OPENSSL/include|g" \
"$OPENSSL/lib64/pkgconfig/$f.pc" \
> "$HOME/.local/pkgconfig/openssl/$f.pc"
done
export PKG_CONFIG_PATH="$HOME/.local/pkgconfig/openssl:$SQLITE/lib/pkgconfig:$LIBFFI/lib/pkgconfig"
export CPPFLAGS="-I$OPENSSL/include -I$SQLITE/include -I$LIBFFI/include"
export LDFLAGS="-L$OPENSSL/lib64 -L$SQLITE/lib -L$LIBFFI/lib64 \
-Wl,-rpath,$OPENSSL/lib64 -Wl,-rpath,$SQLITE/lib \
-Wl,-rpath,$LIBFFI/lib64"
[[ "$(gcc -dumpversion)" == 12.5.0 ]]
[[ "$(pkg-config --modversion openssl)" == 3.3.0-dev ]]
[[ "$(pkg-config --modversion sqlite3)" == 3.49.2 ]]
mkdir -p "$PREFIX"
curl -fLO "https://www.python.org/ftp/python/$V/Python-$V.tar.xz"
echo "de414a57119abef52784d8993e341d53aed635fc2b05c2607d9f98a2c5b72032 Python-$V.tar.xz" \
| sha256sum -c -
tar -xf "Python-$V.tar.xz"
cd "Python-$V"
./configure \
--prefix="$PREFIX" \
--with-openssl="$OPENSSL" \
--with-openssl-rpath=auto \
--with-ensurepip=install
make -j "${SLURM_CPUS_PER_TASK:-8}"
make altinstall
cd "$PREFIX/bin"
ln -sf python3.14 python
ln -sf python3.14 python3
Load the module and verify:
module load ceuadmin/python/3.14.10
python --version
python3 --version
python3.14 --version
python - <<'PY'
import sys
import ssl
import sqlite3
import zlib
import bz2
import lzma
import readline
import ctypes
import curses
import uuid
print("Python: ", sys.version)
print("OpenSSL: ", ssl.OPENSSL_VERSION)
print("SQLite: ", sqlite3.sqlite_version)
print("zlib: ", zlib.ZLIB_VERSION)
print("bz2: OK")
print("lzma: OK")
print("readline: OK")
print("ctypes: OK")
print("curses: OK")
print("uuid: OK")
PY