前言
虽然centOS8已经发布了相当一段时间了,但是基于稳定性、成熟的社区等原因,大家在选择centOS作为服务器操作系统的时候仍然会选择centOS7作为首选。但是centOS7自带的是python2.7.5,当前大量的python程序要用到的又是python3,很多热门的python库甚至就没有支持python2的版本。所以在centOS7上装python3是很常用到的,尤其是装python3.10.X版本。本文选择的python3.10.6.
目录
1.下载安装
1.1.安装前置依赖
1.2.安装包下载
1.3.解压源码包
1.4.进入到解压目录,开始配置
1.5.编译源码
1.6.创建软连接
1.7.修改默认依赖版本
1.8. 创建pip3的软连接
2.报错处理
2.1.No module named '_ssl'
1.下载安装
1.1.安装前置依赖
这里我们直接通过yum安装依赖,输入下列命令进行安装。
yum install zlib-devel bzip2-devel opssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc libffi-devel
1.2.安装包下载
下载地址:
Index of /ftp/python/3.10.6/
可以手动下载传到服务器上再解压,也可以通过wget下载安装包,自行选择。
wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz
没有wget的需要yum下载
yum -y install wget
1.3.解压源码包
tar -xvf Python-3.10.6.tgz
1.4.进入到解压目录,开始配置
./configure
1.5.编译源码
make & make install
1.6.创建软连接
先删除默认的python安装程序。
rm -f /usr/bin/python
将最新的python3.10.6创建软链接。
ln -s 刚刚自己解压出来的安装目录 /usr/bin/python
1.7.修改默认依赖版本
由于系统中很多工具和命令是依赖于原生系统自带的python2的,所以建立软连接将系统的python版本升级为python3后,要手动将这些重要的命令指回原来的python2路径,让他们继续使用python,避免出现因为python版本问题造成的系统工具和指令不可用的问题。
修改yum依赖默认的python版本
vi /usr/libexec/urlgrabber-ext-down
将首行的python 改为 python2
vi /usr/bin/yum
也同样的将首行的python 改为 python2
修改防火墙的python 版本
vi /usr/bin/firewall-cmd
将首行的python 改为 python2
vi /usr/sbin/firewalld
修改完这几个文件之后python的安装已经完成,yum依赖和防火墙的python也都修改成为最新版本的python了。
1.8. 创建pip3的软连接
给pip一个软连接
ln -s刚刚自己解压出来的安装目录/bin/pip3.10 /usr/bin/pip3
2.报错处理
安装好python3.10.X版本后,在使用过程中可能会遇见一些错误,接下来说一下这些错误怎么处理。
2.1.No module named '_ssl'
_ssl 模块没有正确加载或编译。这个模块是 Python 标准库的一部分,用于处理 SSL/TLS 连接。
官方其实记录了这个问题,以下是官方文档:
PEP 644 – Require OpenSSL 1.1.1 or newer | peps.python.org
总结起来就是python3.10以后的版本OPENSSL不再是/usr/local/ssl 的默认路径,变成了/path/to/openssl/directory,而使用openssl3以上的版本的lib目录名也变成了lib64,编辑vim /你自己的Python编译源文件路径/Modules/Setup。
上图中的操作都完成之后,删掉原来编译完成后的python文件目录,重新执行编译命令:
./configure
make & make install
编译完成后用python命令进入编译器界面:
import ssl
如果没报错,就说明问题解决了。
2.2.error while loading shared libraries: libssl.so.1.1
这是因为缺少openssl库造成的
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate
tar -zxf openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-develyum install -y perl-CPAN
perl -MCPAN -e shell
./config --prefix=/usr/local/openssl
make -j 2
make install
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
vim /etc/ld.so.conf
在文件末尾添加一行代码:
/usr/local/openssl/lib
使之生效:
ldconfig -v
验证版本:
openssl version