在 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
这些依赖项各自发挥着重要的作用:
zlib
库提供开发所需的支持,对于处理文件压缩和解压缩操作至关重要。bzip2
格式的压缩库开发,在需要处理 bzip2
压缩数据的场景下必不可少。sqlite
数据库的开发工作而言,此为必备的开发库。Makefile
完成软件的编译和安装任务。gdbm
数据库的开发库,在涉及 gdbm
数据库的开发项目中发挥着重要作用。Berkeley DB
提供开发库,适用于使用该数据库的开发场景。xz
压缩库的开发支持,帮助我们处理 xz
压缩的数据。libffi
的开发库,方便我们调用 C 函数,对于跨语言编程和函数调用很有帮助。Makefile
等构建文件,为后续的编译工作做好准备。系统默认的 GCC 版本可能较低,这在后续的编译过程中很可能导致报错,因此我们需要安装高版本的 GCC。由于不同的 Linux 发行版可能有不同的安装方法,你可以根据自己使用的系统查找合适的安装步骤。在这里,你可以参考
找到适合 CentOS 7.6 的 GCC 高版本安装方法。
接下来,我们将着手编译安装高版本的 OpenSSL。
首先,我们从 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
为了更好地配置 OpenSSL,我们先查找 openssl.cnf
文件的父目录,该文件包含了 OpenSSL 的重要配置信息。通过以下命令进行查找:
find /etc/ -name openssl.cnf -printf "%h\n"
在本次实验中,结果为 /etc/pki/tls
。
然后,我们对下载的压缩包进行解压:
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
为了确保系统能够顺利找到我们安装的 OpenSSL 动态链接库,我们需要添加相应的配置:
echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf.d/openssl-renwole.com.conf
更新库缓存,使系统能识别新添加的库:
ldconfig
将 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。首先从官网(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
使用以下配置命令:
./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
最后,将 Python 3.13 的可执行文件添加到全局变量中,以便随时使用:
echo 'export PATH=/usr/local/python3.13/bin:$PATH' >> /etc/profile
source /etc/profile
完成上述步骤后,我们可以验证 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 及其相关依赖的操作。希望这篇文章能够为你提供帮助,让你顺利完成软件的编译安装工作。如果你在过程中遇到任何问题,欢迎在评论区留言交流,我们一起探讨解决方案。