【python】linux系统python报错“ssl module in Python is not available”

一、问题现象

1.1 执行pip命令报错

pip安装时遇到openssl问题,没办法安装第三方库

“WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ”

1.2 导入import  ssl 报错

直接执行python,进入python, 输入import  ssl ,也会报相似的错误。 

正常情况下,是这样的,导入成功无报错

1.3 执行python脚本报错

二、问题原因

根据出错信息提示分析:ssl模块不可用。

pip默认的安装源https://pypi.org/simple/,采用的是 HTTPS协议,连接是需要SSL库加密和解密。出错信息显示,你的Python没有所需的ssl模块。官网下载的Python已经内建了ssl模块,应该不会出现这个问题。

2.1 openssl版本低

系统版本centos7.4,其中openssl的版本为OpenSSL 1.0.2k-fips,而python3.11需要的openssl的版本为1.1.x及以上,需要对openssl进行升级,并重新编译python3.11(yum 安装的openssl 版本都比较低)。现在有些高版本的linux,openssl已经是1.1.x版本以上,不会出现该opensll版本问题。

2.3 openssl配置问题

已经源码编译安装了高版本的openssl,由于没有配置软链接、和openssl库的位置,导致的问题。

三、解决方案 

3.1 版本低-做OpenSSL升级

3.1.1 直接yum安装高版本的openssl 

yum install -y openssl openssl-libs  openssl-devel openssl-static 
#查看版本
openssl version

3.1.2 源码安装openssl升级(推荐)

wget  https://www.openssl.org/source/old/1.1.1/openssl-1.1.1q.tar.gz
tar -zxvf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
./config --prefix=/usr/local/openssl
make -j8
make install#设置软连接到新版本openssl
ln -sf /usr/local/bin/openssl /usr/bin/openssl
ln -sf /usr/local/include/openssl /usr/include/openssl
#openssl库位置配置
ln -sf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -sf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1echo "/usr/local/lib/" >> /etc/ld.so.conf
ldconfig -vopenssl version
openssl version -a

但是安装好之后,还可能出现以下问题

openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory ,这是由于openssl库的位置不正确造成的。

解决方法:以root用户下执行:

ln -s    /usr/local/lib64/libssl.so.1.1          /usr/lib64/libssl.so.1.1
ln -s    /usr/local/lib64/libcrypto.so.1.1    /usr/lib64/libcrypto.so.1.1

 我本机安装的情况:


3.2 配置问题-补充配置

#设置软连接到新版本openssl
ln -sf /usr/local/bin/openssl /usr/bin/openssl
ln -sf /usr/local/include/openssl /usr/include/openssl#openssl库位置配置
ln -sf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -sf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

看到有的网上说做环境变量配置,但是 感觉做软链接更清晰、简单点。就不谈环境变量配置了。

四、本人采取的方式(不推荐)

参考博主方法https://www.cnblogs.com/miyuanbiotech/p/12307875.html ,也能解决,

但是它是在编译时,可以直接将ssl模块编译进去。如果在安装其他版本的python到本机,不将openssl高版本编译进去,还是不能用。 所以推荐使用上面(三、解决方案)的方法解决该问题。

现在有些高版本的linux,openssl已经是1.1.x版本以上,不会出现该opensll版本问题。

4.1 包下载和安装路径配置

wget -c https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
tar -xvf Python-3.8.1.tgz
cd Python-3.8.1
./configure --prefix=/my/path/python/
# 配置环境后先别急着编译

4.2 Modules/Setup文件修改

SSL=/my/path/openssl  #改为刚安装的ssl路径
_ssl _ssl.c \-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \-L$(SSL)/lib -lssl -lcrypto

4.3 编译安装

make && make install

此时如果直接make编译,仍会报如下类似错误:./python: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory generate-posix-vars failed make: *** [pybuilddir.txt] Error 1 缺少库文件,说明libssl.so.1.1这个库没有读取到。解决方法:有的是以root身份添加软链接。有的将openssl库加入环境变量。这个博主选择了后者。

#执行该命令 添加环境变量
export LD_LIBRARY_PATH=/my/path/openssl-1.1/lib:$LD_LIBRARY_PATH

(此处说一个比较坑的事)

环境变量配置,虽然运行python、和python脚本都没问题。但是做定时任务crontab 时,由于找不到openssl库,任务跑不起来。害自己排错好久,才找到这个原因。最后重新做了 openssl库文件的软连接。
ln -sf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
n -sf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

4.4 测试SSL模块

 该现象说明问题解决了。

五、知识拓展

centos7系统默认安装了python2.X,后续可能又安装了python3.X版本,所以在控制台输入命令进行查看当前机器上安装python情况。因为centos7部分模块依赖于2.X,所以为了不引起某些麻烦,选择不去卸载2.X,直接安装3.X。

# 查看2.x版本情况
python --version 
或
python -V# 查看3.x版本情况
python3 --version
python3 -V 和python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479609.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天一个知识点 - 了解java泛型机制

泛型的本质 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方…

5款白嫖党必备的ai写作神器,你都知道吗? #学习#学习方法#媒体

你是否因为写作困顿而感到沮丧?是不是希望能够找到一个能给你提供无限灵感和提高创作效率的利器?AI写作助手就是你的绝佳选择!现在我向大家推荐几款好用的AI写作助手,它们将让你的创作之旅更加流畅、富有创意。 1.写作兔 这是一…

TypeScript(三):TypeScript面向对象

TypeScript面向对象 类的定义 与JS不同的是,成员属性需要在前面进行提前声明 class Person{//需要在前面对成员变量进行声明name: string//声明的时候,可以对值进行初始化,初始化可以带有类型注解,也可以省略age 18//construc…

常见面试题:TCP的四次挥手和TCP的滑动窗口

说一说 TCP 的四次挥手。 挥手即终止 TCP 连接,所谓的四次挥手就是指断开一个 TCP 连接时。需要客户端和服务端总共发出四个包,已确认连接的断开在 socket 编程中,这一过程由客户端或服务端任意一方执行 close 来触发。这里我们假设由客户端…

Linux:sed进阶(12)

Linux:shell脚本:基础使用(5)《正则表达式-sed工具》_linux脚本表达式s-CSDN博客https://blog.csdn.net/w14768855/article/details/132347574?ops_request_misc%257B%2522request%255Fid%2522%253A%252217084222871680019707523…

MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案

项目场景 有时候,遇到数据库重复数据,需要将数据进行分组,并取出其中一条来展示,这时就需要用到group by语句。 但是,如果mysql是高版本,当执行group by时,select的字段不属于group by的字段的…

强化学习:仿真环境Gym的安装和测试

接下来进行强化学习方面的研究和学习: 首先是安装学习RL最常用的仿真环境——Gym 推荐安装的Gym版本如下,使用pip命令进行安装: pip install gym0.26.2 pip install pygame2.3.0 环境安装完成后,可以使用下面的测试代码进行测试&…

Stable Diffusion 绘画入门教程(webui)-图生图

通过之前的文章相信大家对文生图已经不陌生了,那么图生图是干啥的呢? 简单理解就是根据我们给出的图片做为参考进行生成图片。 一、能干啥 这里举两个例子 1、二次元头像 真人转二次元,或者二次元转真人都行, 下图为真人转二次…

香港Web3:香港虚拟货币 OTC 业务如何合规开展?

撰文:刘红林 文章来源Techub News专栏作者,搜Tehub News下载查看更多Web3资讯。 香港虚拟货币监管两手抓 2024 年 2 月 2 日,香港财经事务及库务局局长许正宇表示,政府认为有需要把虚拟货币场外交易所 (OTC) 纳入监管&#xff0…

Bert基础(一)--自注意力机制

1、简介 当下最先进的深度学习架构之一,Transformer被广泛应用于自然语言处理领域。它不单替代了以前流行的循环神经网络(recurrent neural network, RNN)和长短期记忆(long short-term memory, LSTM)网络,并且以它为基础衍生出了诸如BERT、GPT-3、T5等…

cockpit install

Running Cockpit — Cockpit Project ip:9090 如果9090端口被占用,可以改为9091 cat /etc/systemd/system/sockets.target.wants/cockpit.socket [Unit] DescriptionCockpit Web Service Socket Documentationman:cockpit-ws(8) Wantscockpit-motd.service[Socket…

VScode写LaTeX配置,实测有效

环境配置请看LaTeX环境配置-TexLive,实测有效http://t.csdnimg.cn/0txlL VScode写LaTeX配置 0.smatra pdf下载 如果使用外部pdf查看器,比如我用的sumatra pdf,官网是Sumatra PDF reader download page 下载对应版本,比如64位,下…