转载链接 https://blog.frognew.com/2024/12/build-python3.13-from-source.html
构建需求
构建CPython所需的功能和最低版本要求如下:
OpenSSL 的最低版本为1.1.1,推荐最低版本为3.0.9,用于
ssl
和hashlib
扩展模块。SQLite的最低版本为3.15.2,用于
sqlite3
扩展模块。Tcl/Tk的最低版本为8.5.12,用于
tkinter
模块。重新生成
configure
脚本需要Autoconf 2.71和aclocal 1.16.5。
准备工作
安装依赖和构建工具
ubuntu
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev tk-dev
CentOS7
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
yum install centos-release-scl-rh
sed -i 's#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh#\#mirrorlist=mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh#g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
sed -i 's#\#baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/rh/#baseurl=https://mirrors.aliyun.com/centos/7/sclo/$basearch/rh/#g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
yum clean all
yum makecache
yum install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
scl enable devtoolset-11 bash
编译安装新版openssl,要求3.0.9版本以上。
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
yum install -y perl perl-core perl-CPAN perl-IPC-Cmd
tar -zxvf openssl-3.4.0.tar.gz
cd openssl-3.4.0
./config --prefix=/usr/local/openssl-3.4.0
make -j4
make install
echo '/usr/local/openssl-3.4.0/lib64' > /etc/ld.so.conf.d/openssl-3.4.0.conf
# 更新动态链接库缓存
ldconfig -v
编译安装Python 3.13
ubuntu
cd ~
wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz
tar xzf Python-3.13.1.tgz
cd Python-3.13.1
sudo ./configure --prefix=/usr/local/python-3.13 --enable-optimizations --with-lto --with-computed-gotos --with-system-ffi --enable-shared
sudo make -j "$(nproc)"
sudo ./python3.13 -m test -j "$(nproc)"
sudo make altinstall
CentOS7
yum install -y \
openssl-devel \
bzip2-devel \
libffi-devel \
zlib-devel \
sqlite-devel \
readline-devel \
tk-devel \
gdbm-devel \
libpcap-devel \
xz-devel
cd ~
wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz
tar -xvzf Python-3.13.1.tgz
cd Python-3.13.1
export CFLAGS="-I/usr/local/openssl-3.4.0/include"
export LDFLAGS="-L/usr/local/openssl-3.4.0/lib64"
export PKG_CONFIG_PATH="/usr/local/openssl-3.4.0/lib64/pkgconfig:/usr/lib64/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="/usr/local/openssl-3.4.0/lib64:$LD_LIBRARY_PATH"
./configure --prefix=/usr/local/python-3.13 \
--enable-optimizations \
--enable-shared \
--with-ensurepip=upgrade \
--with-lto \
--with-computed-gotos \
--enable-loadable-sqlite-extensions \
--with-pkg-config=yes \
--with-openssl=/usr/local/openssl-3.4.0
scl enable devtoolset-11 bash
make -j4
make altinstall
echo '/usr/local/python-3.13/lib' > /etc/ld.so.conf.d/python3.13.conf
# 更新动态链接库缓存
ldconfig -v
验证安装
/usr/local/python-3.13/bin/python3.13 --version
Python 3.13.1
/usr/local/python-3.13/bin/python3.13
>>> import sys
>>> print(sys.platform)
linux
>>> print(sys.implementation.name)
cpython
>>> print(sys.version_info)
sys.version_info(major=3, minor=13, micro=1, releaselevel='final', serial=0)
>>> print(sys.version)
3.13.1 (main) [GCC 11.2.1 20220127 (Red Hat 11.2.1-9)]