> 技术文档 > CentOS 7 编译安装 Python 3.12详细教程_centos7安装python3.12

CentOS 7 编译安装 Python 3.12详细教程_centos7安装python3.12


概述

CentOS 7 由于其系统自带的软件包版本较旧(如 GCC 4.8.5, OpenSSL 1.0.2k),无法直接满足 Python 3.12 的编译要求。Python 3.12+ 需要 GCC 7+ 和 OpenSSL 1.1.1+ 的支持。

本教程将指导您如何在一个“干净”的 CentOS 7 环境下,通过以下步骤,成功编译并安装 Python 3.12:

  1. 修复 YUM 源:由于 CentOS 7 已停止维护(EOL),官方镜像源已不可用,需切换至归档源 vault.centos.org
  2. 安装并启用新版 GCC:使用 SCL (Software Collections Library) 安装 devtoolset-8 (包含 GCC 8.3),以满足 Python 的编译环境要求。
  3. 安装编译依赖:安装编译 Python 所需的通用依赖库。
  4. 编译安装 OpenSSL 1.1.1:手动编译并安装符合 Python 3.12 要求的 OpenSSL 版本。
  5. 编译安装 Python 3.12:使用新版的 GCC 和 OpenSSL 编译并安装 Python 3.12。
  6. 配置环境变量:将新安装的 Python 3.12 添加到系统路径中,方便使用。
  7. 验证安装:检查 Python 和 Pip 版本,并验证 SSL 模块是否正常工作。

第 1 步:修复 CentOS 7 的 YUM 源

由于 CentOS 7 已于 2024 年 6 月 30 日停止维护,其默认的 mirror.centos.org 镜像已失效。我们需要将 YUM 源地址修改为官方的归档地址 vault.centos.org

执行以下命令来自动完成替换:

# 切换到 vault.centos.org 归档源sudo sed -i \'s/mirrorlist/#mirrorlist/g\' /etc/yum.repos.d/CentOS-*sudo sed -i \'s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g\' /etc/yum.repos.d/CentOS-*

更新 YUM 缓存以确保配置生效:

sudo yum clean allsudo yum makecache

第 2 步:安装并启用新版 GCC (devtoolset-8)

Python 3.12 需要高版本的 GCC 编译器。我们将通过 SCL 来安装 GCC 8。

  1. 安装 SCL 仓库

    sudo yum install -y centos-release-scl
  2. 安装 devtoolset-8

    sudo yum install -y devtoolset-8-gcc*
  3. 启用新版 GCC
    SCL 的工具集不会替换系统默认工具,而是创建一个临时的 shell 环境来使用新版本。执行以下命令进入一个启用了 GCC 8 的新 bash 会话。

    scl enable devtoolset-8 bash

    注意: 此命令只在当前终端会话中有效。后续所有编译操作(OpenSSL 和 Python)都必须在此会话中完成。如果关闭终端或重新登录,需要再次执行 scl enable devtoolset-8 bash

  4. 验证 GCC 版本
    在新的 bash 会话中,检查 GCC 版本,确认已切换成功。

    gcc -v

    您应该能看到输出中显示 GCC 版本为 8.x.x。

第 3 步:安装编译依赖

在编译 OpenSSL 和 Python 之前,需要安装一些基础的开发库,否则会导致 Python 缺少某些重要模块(如 zlib, _ctypes 等)。

sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel \\  sqlite-devel readline-devel tk-devel gdbm-devel \\  db4-devel libpcap-devel xz-devel libffi-devel

第 4 步:编译安装 OpenSSL 1.1.1

Python 3.12 需要 OpenSSL 1.1.1 或更高版本。我们将手动编译并安装它到一个独立的目录,以避免与系统自带的 OpenSSL 冲突。

  1. 下载并解压 OpenSSL 源码
    我们选择 1.1.1w 版本,这是一个长期支持版。

    cd /usr/local/srcwget https://www.openssl.org/source/openssl-1.1.1w.tar.gztar -xzf openssl-1.1.1w.tar.gz
  2. 编译和安装 OpenSSL
    我们将它安装到 /usr/local/openssl1.1.1 目录。

    cd openssl-1.1.1w# --prefix 指定安装目录,shared 表示生成共享库,zlib 表示启用 zlib 压缩./config shared zlib --prefix=/usr/local/openssl1.1.1# 使用所有 CPU核心进行编译make -j$(nproc)sudo make install
  3. 配置 OpenSSL 动态链接库
    让系统能够找到新安装的 OpenSSL 共享库。

    echo \"/usr/local/openssl1.1.1/lib\" | sudo tee /etc/ld.so.conf.d/openssl-1.1.1.confsudo ldconfig
  4. 验证 OpenSSL 库
    检查系统动态链接库缓存中是否已包含新版本的 libssl.so.1.1

    ldconfig -p | grep libssl.so.1.1

    输出应显示指向 /usr/local/openssl1.1.1/lib 的路径。

第 5 步:编译安装 Python 3.12

现在,万事俱备,我们可以开始编译 Python 3.12 了。

  1. 下载并解压 Python 源码
    请前往 Python 官网 获取最新的 3.12.x 版本的下载链接。这里以 3.12.4 为例。

    cd /usr/local/srcwget https://www.python.org/ftp/python/3.12.4/Python-3.12.4.tgztar -zxvf Python-3.12.4.tgzcd Python-3.12.4
  2. 配置、编译和安装 Python
    在配置(configure)阶段,我们需要明确指定新 OpenSSL 的路径,并开启优化和共享库选项。

    # 创建安装目录sudo mkdir -p /usr/local/python3.12# 配置LDFLAGS=\"-L/usr/local/openssl1.1.1/lib\" \\CPPFLAGS=\"-I/usr/local/openssl1.1.1/include\" \\./configure --prefix=/usr/local/python3.12 \\ --with-openssl=/usr/local/openssl1.1.1 \\ --enable-shared \\ --enable-optimizations# 编译和安装make -j$(nproc)sudo make install
    • --prefix: 指定 Python 的安装目录。
    • --with-openssl: 明确指向我们新安装的 OpenSSL 目录。
    • LDFLAGSCPPFLAGS: 帮助编译器找到 OpenSSL 的库和头文件。
    • --enable-shared: 生成 libpython3.12.so 共享库,一些第三方包可能需要。
    • --enable-optimizations: 开启 PGO 优化,会使编译变慢,但能提升 Python 运行性能。
  3. 配置 Python 动态链接库
    与 OpenSSL 类似,让系统找到 Python 的共享库。

    echo \"/usr/local/python3.12/lib\" | sudo tee /etc/ld.so.conf.d/python3.12.confsudo ldconfig

第 6 步:配置环境变量

为了方便地在任何路径下使用 python3.12pip3.12,我们需要将其 bin 目录添加到系统的 PATH 环境变量中。

  1. 编辑全局配置文件 /etc/profile

    sudo vim /etc/profile
  2. 在文件末尾添加以下内容

    # Python 3.12 Environmentexport PYTHON_HOME=/usr/local/python3.12export PATH=$PYTHON_HOME/bin:$PATH
  3. 让配置立即生效

    source /etc/profile

    此命令只对当前终端有效。新打开的终端或重新登录后,配置将自动加载。

第 7 步:验证安装

最后,检查所有组件是否已正确安装并协同工作。

  1. 检查 Python 版本

    python3.12 -V

    应输出 Python 3.12.4 (或您安装的具体版本)。

  2. 检查 Pip 版本

    pip3.12 -V

    应输出 Pip 的版本信息,并显示其路径在 /usr/local/python3.12/... 下。

  3. 验证 SSL 模块
    这是最关键的一步,用于确认 Python 是否成功链接了我们新编译的 OpenSSL。

    python3.12 -c \"import ssl; print(ssl.OPENSSL_VERSION)\"

    输出应为 OpenSSL 1.1.1w ... 或您安装的 OpenSSL 版本,而不是系统旧的 1.0.2k 版本。

至此,您已在 CentOS 7 系统上成功安装了 Python 3.12,并具备了完整的 SSL 支持。