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

这篇具有很好参考价值的文章主要介绍了【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. ”【python】linux系统python报错“ssl module in Python is not available”,python,linux,pip

1.2 导入import  ssl 报错

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

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

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

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

1.3 执行python脚本报错

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

二、问题原因

根据出错信息提示分析: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版本问题。

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

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

 我本机安装的情况:【python】linux系统python报错“ssl module in Python is not available”,python,linux,pip


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模块

 该现象说明问题解决了。【python】linux系统python报错“ssl module in Python is not available”,python,linux,pip

五、知识拓展

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

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

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

到了这里,关于【python】linux系统python报错“ssl module in Python is not available”的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 报错:__dirname is not defined in ES module scope

     在给vite+vue3.0设置别名的时候,直接使用了__dirname这个内置变量报错 __dirname is not defined in ES module scope 报错原因:  __dirname是commonjs规范的内置变量。如果使用了esm,是不会注入这个变量的。 在commonjs中,注入了__dirname,__filename, module, exports, require五个内置变量用于实现导入导

    2024年02月10日
    浏览(40)
  • 解决报错: require is not defined in ES module scope

    用node启动mjs文件报错:require is not defined in ES module scope 现象如下:  原因: 文件后缀是mjs, 被识别为es模块,但是node默认是commonjs格式,不支持也不能识别es模块。 解决办法:把文件后缀从.mjs改成 ==》.cjs后缀 补充资料: .cjs 代表使用 CommonJS 模块 .mjs 代表使用 ES 模块 首先我

    2024年02月08日
    浏览(53)
  • python报错:tesseract is not installed or it‘s not in your PATH.

    问题 :pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it’s not in your PATH. 1 电脑安装tesseract tesseract下载地址 一路默认安装,最后安装地址选择了D盘 配置path环境变量 cmd中 输入tesseract,安装成功 2 python 依赖包 还是报错 File “D:anacondaLibsite-packagespytesseractpytesse

    2024年02月03日
    浏览(45)
  • Python报错ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is compil

    运行openai模块时,报错 ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl’ module is compiled with LibreSSL 2.8.3. 可以在解释器中将urllib3指定版本号

    2024年02月11日
    浏览(53)
  • 解决报错:Can‘t connect to HTTPS URL because the SSL module is not available.

    本人今天准备打开Pycharm安装一个label-studio包,试了很多次,接连报如下错误,因此我就去找了一些解决方案,现在总结如下: github上有对应的解决方案,链接:https://github.com/conda/conda/issues/8273 说的是D:Anaconda3DLLs ssl.pyd search for the OpenSSL DLLs but in the wrong/current location,也就是

    2024年02月15日
    浏览(40)
  • windows: pip install 报错SSLError Can‘t connect to HTTPS URL because the SSL module is not available

    windows anaconda pip清华源 通过pip install 安装不成功,会报错(Caused by SSLError(\\\"Can\\\'t connect to HTTPS URL because the SSL module is not available.\\\")) 错误详情如下: 具体是什么错误什么原因导致,不去深究了。或许是源本身有问题?下面直接提供解决方法,通过更换源解决了该错误 加上--truste

    2024年02月15日
    浏览(52)
  • uview-ui报错:Component is not found in path node-modules/uview-ui/components/xx/xx

    解决方法: 1、uview-ui如果是npm安装 需要在pages.json中添加easycom配置 2、配置了以上还报错的话可能是 tempalte样式最外层没用标签包括着(只允许有一层用 view/view 包裹最外层) 3、如果试过方法还没解决的话,可以试试彻底 关闭开发者工具关闭,重启 如你还有其他更好的解决

    2024年02月11日
    浏览(43)
  • uni-app项目使用uview-ui报错:Component is not found in path node-modules/uview-ui/components/xx/xx

    解决: 一、uview-ui如果是 npm 安装 需要在 pages.json 中添加 easycom 配置 二、配置了以上还报错的话可能是 tempalte 样式最外层没用标签包括着(只允许有一层 用 view/view 包裹最外层

    2024年02月11日
    浏览(69)
  • 完美解决:Python3.10报错 No module named ‘_ssl‘

    报错详情: 操作系统为centos7,python版本为3.10.7,openssl版本为3.0.5,运行gunicorn报No module named \\\'_ssl\\\' 原因就是python3.10和openssl3.0.5的版本配置文件跟以前有点区别,python3.10的版本OPENSSL不再是/usr/local/ssl 的默认路径,变成了/path/to/openssl/directory,已经提示得很明白了让你在这里写入

    2024年02月12日
    浏览(45)
  • ReferenceError: __dirname is not defined in ES module scope

    运行代码 报错: package.json 加了以下配置 1、方法一 删除文件 package.json 中的配置项: \\\"type\\\": \\\"module\\\" 2、方法二 注意:该方法得到的是运行目录,并不是该文件的所在目录 ESM下,不能直接引入json文件了,需要通过文件接口读取解析 参考 https://stackoverflow.com/questions/8817423/why-i

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包