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:
- 修复 YUM 源:由于 CentOS 7 已停止维护(EOL),官方镜像源已不可用,需切换至归档源
vault.centos.org
。 - 安装并启用新版 GCC:使用 SCL (Software Collections Library) 安装
devtoolset-8
(包含 GCC 8.3),以满足 Python 的编译环境要求。 - 安装编译依赖:安装编译 Python 所需的通用依赖库。
- 编译安装 OpenSSL 1.1.1:手动编译并安装符合 Python 3.12 要求的 OpenSSL 版本。
- 编译安装 Python 3.12:使用新版的 GCC 和 OpenSSL 编译并安装 Python 3.12。
- 配置环境变量:将新安装的 Python 3.12 添加到系统路径中,方便使用。
- 验证安装:检查 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。
-
安装 SCL 仓库
sudo yum install -y centos-release-scl
-
安装 devtoolset-8
sudo yum install -y devtoolset-8-gcc*
-
启用新版 GCC
SCL 的工具集不会替换系统默认工具,而是创建一个临时的 shell 环境来使用新版本。执行以下命令进入一个启用了 GCC 8 的新bash
会话。scl enable devtoolset-8 bash
注意: 此命令只在当前终端会话中有效。后续所有编译操作(OpenSSL 和 Python)都必须在此会话中完成。如果关闭终端或重新登录,需要再次执行
scl enable devtoolset-8 bash
。 -
验证 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 冲突。
-
下载并解压 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
-
编译和安装 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
-
配置 OpenSSL 动态链接库
让系统能够找到新安装的 OpenSSL 共享库。echo \"/usr/local/openssl1.1.1/lib\" | sudo tee /etc/ld.so.conf.d/openssl-1.1.1.confsudo ldconfig
-
验证 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 了。
-
下载并解压 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
-
配置、编译和安装 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 目录。LDFLAGS
和CPPFLAGS
: 帮助编译器找到 OpenSSL 的库和头文件。--enable-shared
: 生成libpython3.12.so
共享库,一些第三方包可能需要。--enable-optimizations
: 开启 PGO 优化,会使编译变慢,但能提升 Python 运行性能。
-
配置 Python 动态链接库
与 OpenSSL 类似,让系统找到 Python 的共享库。echo \"/usr/local/python3.12/lib\" | sudo tee /etc/ld.so.conf.d/python3.12.confsudo ldconfig
第 6 步:配置环境变量
为了方便地在任何路径下使用 python3.12
和 pip3.12
,我们需要将其 bin
目录添加到系统的 PATH
环境变量中。
-
编辑全局配置文件
/etc/profile
sudo vim /etc/profile
-
在文件末尾添加以下内容
# Python 3.12 Environmentexport PYTHON_HOME=/usr/local/python3.12export PATH=$PYTHON_HOME/bin:$PATH
-
让配置立即生效
source /etc/profile
此命令只对当前终端有效。新打开的终端或重新登录后,配置将自动加载。
第 7 步:验证安装
最后,检查所有组件是否已正确安装并协同工作。
-
检查 Python 版本
python3.12 -V
应输出
Python 3.12.4
(或您安装的具体版本)。 -
检查 Pip 版本
pip3.12 -V
应输出 Pip 的版本信息,并显示其路径在
/usr/local/python3.12/...
下。 -
验证 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 支持。