前言

虽然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'

2.2.error while loading shared libraries: libssl.so.1.1


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-devel

yum 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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐