在 Linux 系统上编译安装高版本 Python

在 Linux 系统上进行软件安装时,我们经常会面临各种挑战,其中一个典型的情况就是官网不再提供所需软件的二进制包,这时我们就不得不进行编译安装。本文将为你详细展示如何在 CentOS 7.6 系统上完成高版本 Python 的编译安装,并涵盖了一系列前置依赖的安装、高版本 OpenSSL 的编译安装以及相关的环境配置过程,帮助你克服可能遇到的困难。

一、实验环境说明

本次实验使用的系统是 CentOS 7.6,你可以通过以下命令查看系统版本:

cat /etc/redhat-release 

输出结果如下:

CentOS Linux release 7.6.1810 (Core)

二、安装前置依赖

在开始编译安装 Python 之前,我们需要先安装一系列的前置依赖,这些依赖将为后续的编译工作奠定坚实的基础。通过以下 yum 命令,我们可以一次性安装所需的各种依赖项:

yum -y install perl-Data-Dumper perl-IPC-Cmd wget zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel make gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel cmake

这些依赖项各自发挥着重要的作用:

  • perl-Data-Dumper:一个 Perl 模块,能将数据结构转换为字符串表示,为数据的调试和处理提供便利。
  • perl-IPC-Cmd:该 Perl 模块可以帮助我们执行外部命令,在自动化脚本编写和系统管理等方面非常有用。
  • wget:一款广为人知的命令行工具,可从网络上高效地下载文件,我们后续会使用它来获取所需软件的源代码。
  • zlib-devel:为 zlib 库提供开发所需的支持,对于处理文件压缩和解压缩操作至关重要。
  • bzip2-devel:支持 bzip2 格式的压缩库开发,在需要处理 bzip2 压缩数据的场景下必不可少。
  • ncurses-devel:为开发文本用户界面程序提供支持,让我们可以创建具有良好交互性的终端应用程序。
  • sqlite-devel:对于使用 sqlite 数据库的开发工作而言,此为必备的开发库。
  • readline-devel:它可以为命令行输入带来更好的用户体验,例如输入历史记录和自动补全功能。
  • tk-devel:为开发使用 Tcl/Tk 的 GUI 程序提供所需的开发库。
  • make:作为核心的构建工具,它依据 Makefile 完成软件的编译和安装任务。
  • gdbm-devel:是 gdbm 数据库的开发库,在涉及 gdbm 数据库的开发项目中发挥着重要作用。
  • db4-devel:为 Berkeley DB 提供开发库,适用于使用该数据库的开发场景。
  • libpcap-devel:该开发库用于开发网络数据包捕获程序,在网络监控和分析领域有着广泛的应用。
  • xz-devel:提供 xz 压缩库的开发支持,帮助我们处理 xz 压缩的数据。
  • libffi-devel:提供 libffi 的开发库,方便我们调用 C 函数,对于跨语言编程和函数调用很有帮助。
  • cmake:是一个跨平台的构建工具,能够生成 Makefile 等构建文件,为后续的编译工作做好准备。

三、安装高版本 GCC

系统默认的 GCC 版本可能较低,这在后续的编译过程中很可能导致报错,因此我们需要安装高版本的 GCC。由于不同的 Linux 发行版可能有不同的安装方法,你可以根据自己使用的系统查找合适的安装步骤。在这里,你可以参考

gcc8.5编译安装及rpm包构建-CSDN博客

找到适合 CentOS 7.6 的 GCC 高版本安装方法。

四、编译安装高版本 OpenSSL

接下来,我们将着手编译安装高版本的 OpenSSL。

1. 下载源代码

首先,我们从 OpenSSL 的官网(https://openssl-library.org/source/)获取 OpenSSL 的源代码。使用以下命令进行下载:

wget https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz

2. 查找 openssl.cnf 文件的父目录

为了更好地配置 OpenSSL,我们先查找 openssl.cnf 文件的父目录,该文件包含了 OpenSSL 的重要配置信息。通过以下命令进行查找:

find /etc/ -name openssl.cnf -printf "%h\n"

在本次实验中,结果为 /etc/pki/tls

3. 解压和编译安装

然后,我们对下载的压缩包进行解压:

tar -zxvf openssl-3.4.0.tar.gz 

进入解压后的 openssl-3.4.0 目录:

pushd openssl-3.4.0

接着,使用以下配置命令:

./config --prefix=/usr/local/openssl --openssldir=/etc/pki/tls

这个配置命令的参数含义如下:

  • --prefix=/usr/local/openssl:指定 OpenSSL 的安装目录,方便我们对其进行管理和维护。
  • --openssldir=/etc/pki/tls:将 OpenSSL 的配置文件目录设置为 /etc/pki/tls,使其与系统原有的配置结构相匹配。

完成配置后,我们开始生成依赖信息:

make -j1 depend

这里使用 -j1 是为了避免某些依赖生成时可能出现的竞争条件。

随后,使用多核心并行编译:

make -j$(nproc)

最后,安装 OpenSSL:

make install_sw

完成后,我们将返回上一级目录:

popd

4. 配置动态链接库

为了确保系统能够顺利找到我们安装的 OpenSSL 动态链接库,我们需要添加相应的配置:

echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf.d/openssl-renwole.com.conf

更新库缓存,使系统能识别新添加的库:

ldconfig

5. 配置环境变量

将 OpenSSL 的可执行文件添加到全局变量中,方便在任何位置使用:

echo 'export PATH=/usr/local/openssl/bin:$PATH' >> /etc/profile
source /etc/profile

坑记录:!!!
编译完成之后使用pip3总是报错 SSLError("Can't connect to HTTPS URL because the SSL module is not available") 网上找了很多方式也没有解决,最后找到python官方提供的命令尝试后解决,文档地址 2. Using Python on Unix platforms — Python 3.13.1 documentation

五、安装 Python

1. 下载和解压 Python 源代码

现在,我们开始安装 Python。首先从官网(https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz)下载 Python 3.13.1 的源码包:

wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz

解压源码包:

tar -zxvf Python-3.13.1.tgz

进入解压后的 Python 源代码目录:

pushd Python-3.13.1

2. 配置和编译 Python

使用以下配置命令:

./configure --prefix=/usr/local/python3.13 --with-openssl=/usr/local/openssl --with-openssl-rpath=auto --enable-optimizations 

此命令的参数解释如下:

  • --prefix=/usr/local/python3.13:将 Python 3.13 安装在 /usr/local/python3.13 目录,这样可以方便地管理不同版本的 Python,避免与系统默认的 Python 版本混淆。
  • --with-openssl=/usr/local/openssl:让 Python 3.13 在编译时使用 /usr/local/openssl 处的 OpenSSL 库,这对于 Python 的 ssl 模块等 SSL 相关功能至关重要。
  • --with-openssl-rpath=auto:自动设置 OpenSSL 的运行时库路径,确保 OpenSSL 库的正确加载。
  • --enable-optimizations:启用优化选项,虽然会增加编译时间,但能显著提升 Python 解释器的性能,为后续程序运行带来更出色的性能表现。

完成配置后,开始编译:

make -j$(nproc)

使用以下命令进行安装,你可以根据自己的需求选择 make installmake altinstall

make altinstall  

3. 配置 Python 的环境变量

最后,将 Python 3.13 的可执行文件添加到全局变量中,以便随时使用:

echo 'export PATH=/usr/local/python3.13/bin:$PATH' >> /etc/profile
source /etc/profile

4. 验证

完成上述步骤后,我们可以验证 Python 3.13 的安装是否成功:

python3.13

会看到类似如下的输出:

Python 3.13.1 (main, Jan 15 2025, 13:32:31) [GCC 8.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

我们还可以通过以下命令验证 pip 是否可用:

pip3.13 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests

通过上述详细的步骤,我们就成功完成了在 Linux 系统上编译安装高版本 Python 及其相关依赖的操作。希望这篇文章能够为你提供帮助,让你顺利完成软件的编译安装工作。如果你在过程中遇到任何问题,欢迎在评论区留言交流,我们一起探讨解决方案。

你可能感兴趣的:(python)