CentOS 7 编译安装 Python 3.10

2

公司某些环境还在用着老掉牙的 CentOS 7 系统,为了运行一个 python3 的脚本费劲搞半天。由于部署机器的 GLIBC 版本老旧为 2.17,并且无法升级,只能在 Docker 中基于同版本的 GLIBC 构建一个 Python 3的环境用于编译可执行脚本。
P.S. 直接用第三方源安装编译好的 Python 是不够的,通过 Pyinstaller 打包时可能会缺少 so 文件。

准备:

  1. CentOS 7 Docker镜像,尽量与目标机器版本一致
  2. Docker
  3. 最好能连接外网

安装

环境依赖

yum install gcc perl zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gdbm-devel db4-devel libpcap-devel xz-devel make -y

安装 Openssl 1.1.1

该步骤非常重要,必须现行安装,Centos 7 默认的 Openssl 版本过低,会导致 Python 缺少 ssl 模块,或者 某些包不可用。

编译安装

wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -zxf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config --prefix=/usr/local/openssl
make -j6
make install
mv /usr/bin/openssl /usr/bin/openssl.bak  # 无该文件可忽略
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl

配置 ldconfig

  1. vi /etc/ld.so.conf, 在最后新增一行:
/usr/local/openssl/lib
  1. 执行 ldconfig -v

验证

openssl version

编译安装 Python

wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
tar -xvzf Python-3.10.14.tgz
./configure --enable-shared --with-openssl=/usr/local/openssl
make -j6
make install
cp --no-clobber ./libpython3.10.so* /lib64/
chmod 755 /lib64/libpython3.10.so*
pythn3 -V
pip3 -V