在 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 install 或 make 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 及其相关依赖的操作。希望这篇文章能够为你提供帮助,让你顺利完成软件的编译安装工作。如果你在过程中遇到任何问题,欢迎在评论区留言交流,我们一起探讨解决方案。
828

被折叠的 条评论
为什么被折叠?



