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

news2025/1/16 18:44:51

一、问题现象

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.1


echo "/usr/local/lib/" >> /etc/ld.so.conf
ldconfig -v

openssl 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.coloradmin.cn/o/1458799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法面试八股文『 模型详解篇 』

说在前面 这是本系列的第二篇博客,主要是整理了一些经典模型的原理和结构,面试有时候也会问到这些模型的细节,因此都是需要十分熟悉的。光看原理还不够,最好是能用代码试着复现,可以看看李沐老师深度学习的教材&#…

AT24C02(I2C总线)通信的学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、存储器介绍二、AT24C02芯片二、I2C总线I2C电路规范I2C时序结构I2C数据帧AT24C02数据帧 总结 前言 学习AT24C02(I2C总线)芯片 一、存储器介绍 RAM&#xf…

PostgreSQL使用session_exec和file_fdw实现失败次数锁定用户策略

使用session_exec 、file_fdw以及自定义函数实现该功能。 缺陷:实测发现锁用户后,进去解锁特定用户。只能允许一次登陆,应该再次登陆的时候,触发函数,把之前的日志里的错误登陆的信息也计算到登录次数里了。而且foreig…

VsCode指定插件安装目录

VsCode指定插件安装目录 VsCode安装的默认目录是在用户目录(%HomePath%)下的.vscode文件夹下的extensions目录下,随着安装插件越来越多会占用大量C盘空间。 指定VsCode的插件目录 Vscode安装目录: D:\Microsoft VS Code\Code.exeVscode插件安装目录&a…

MyBatis数据库查询

文章目录 什么是MyBatisMyBatis程序的创建MyBatis实现数据库查询传参查询插入实现添加操作获取自增ID删除实现修改实现#{}和${}SQL注入 like查询 resultMap和resultType多表查询 对于普遍的后端开发而言,其程序主要包含了后端主程序和数据库两个部分,用户…

【Java】eclipse安装JDBC连接MySQL数据库教程

1.下载JDBC 首先在官网中下载JDBC,下载地址:MySQL :: MySQL Connectors 如果无法进入官网可以点击这里下载:https://download.csdn.net/download/weixin_47040861/88855729 进入官网后找到Develop by MySQL一栏,在该栏下找到JDB…

代码随想录算法训练营DAY20 | 二叉树 (8)

一、LeetCode 701 二叉搜索树中的插入操作 题目链接: 701.二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 思路:见缝插针罢辽。 class Solution {public TreeNode insertIntoBST(TreeNode root, i…

数组的左旋和右旋算法

public class Test09 {public static void main(String[] args) {//右旋 数组逆序遍历,将尾部元素,不断交换至头部int[] arr {1,2,3,4,5,6,7,8};for(int i arr.length-1;i>0;i--) { //遍历一次arr[i] arr[i] ^ arr[i-1];arr[i-1] arr[i] ^ arr[i…

【EI会议征稿通知】第九届电子技术和信息科学国际学术会议(ICETIS 2024)

第九届电子技术和信息科学国际学术会议(ICETIS 2024) The 9th International Conference on Electronic Technology and Information Science(ICETIS 2024) ICETIS会议始于2016年,先后吸引众多来自国内外高等院校、科…

如何看待Java是一门半编译半解释型的语言(企业真题)

如何看待Java是一门半编译半解释型的语言 解答:可能是解释执行,可能是编译执行

用户空间与内核通信(二)

文章:用户空间与内核通信(一)介绍了系统调用(System Call),内核模块参数和sysfs,sysctl函数方式进行用户空间和内核空间的访问。本章节我将介绍使用netlink套接字和proc文件系统实现用户空间对内…

《白话C++》第10章 STL和boost,Page101 10.4.6 std::weak_ptr

2.基本功能 “柔弱的”weak_ptr专门用来解决上述设计中必须面对的循环指向问题。 weak_ptr并不是真正的智能指针,它必须依附于shared_ptr存在。对应前面的C1、C2,我们写一个弱引用版本的C3和C4的例子: struct C4; struct C3 {~C3(){cout…

社区店运营方案全攻略,助你实现商业梦想

在如今竞争激烈的商业环境中,成功运营一家社区店需要全面的规划和策略。 作为一名在社区开鲜奶吧5年的创业者,我将为你提供一份全面的社区店运营方案攻略,帮助你实现商业梦想。 1、市场调研: 在选择社区店的位置之前&#xff0c…

Java使用Redis实现消息队列

近期刷Java面试题刷到了“如何使用Redis实现消息队列”,解答如下: 一般使用 list 结构作为队列, rpush 生产消息, lpop 消费消息。当 lpop 没有消息的时候,要适当sleep 一会再重试。若不使用sleep,则可以用…

【C++】STL- > string类(超详解!!!)

文章目录 前言1、string类的出现1.1 C语言中的字符串1.2 平时使用 2. 标准库中的string类2.1 string类的常用文档(重要)!!!!2.2 string类的常用接口说明(接口原型我这里就不展示了,文档中都有可…

springcloud-远程调用

微服务的远程调用 RestTemplate 在项目中,当我们需要远程调用一个 HTTP 接口时,我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类。 实例化RestTemplate 创建配置类,实例化RestTemplate Configuration public clas…

ubuntu解决“E: Unable to locate package lrzsz“

今天在ubuntu上安装rzsz包时报错,提示无法定位包,提示如下 出现这个问题是因为apt的源没有更新,我们直接说解决办法 把下面的命令执行一遍即可 sudo add-apt-repository main sudo add-apt-repository universe sudo add-apt-repository re…

【漏洞复现】H3C 路由器多系列信息泄露漏洞

Nx01 产品简介 H3C路由器是一款高性能的路由器产品,具有稳定的性能和丰富的功能。它采用了先进的路由技术和安全机制,可以满足不同用户的需求,广泛应用于企业、运营商和数据中心等领域。 Nx02 漏洞描述 H3C路由器多系列存在信息泄露漏洞&…

“薪”的一年程序员裁员潮技术变革情况下 程序员就业机会在哪里?

引言:一对来自中国的工程师夫妻在美国的不幸身亡,疑似与谷歌的裁员有关,这一事件再次引发了人们对技术变革下裁员对程序员影响的关注。 一、针对裁员潮的一些看法 在我看来,技术变革对程序员的影响是双面的。一方面,…

抛弃chatgpt,使用微软的Cursor提升coding效率

Whats Cursor? Cursor编辑器是一个基于GPT-4的代码编辑器,它可以根据用户的自然语言指令或者正在编辑的代码上下文为用户提供代码建议,支持多种编程语言,如Python、Java、C/C#、go等。Cursor编辑器还可以帮助用户重构、理解和优化代码&…