Linux更新openssl版本,以解决Python的requests库 import失败

2024-01-10 09:32:53 浏览数 (1)

写了一个python 小教本,当我放在我的服务器上运行时候发现报错了,今天就来写一下这个报错的解决过程。

报错原因

代码语言:javascript复制
# coding=utf-8
# !/usr/bin/python
import requests. #这是第三行代码
import re
from datetime import datetime
import json
....
#当我用python xx.py执行时候,报以下错误:
Traceback (most recent call last):
  File "/hu/news/xx.py", line 3, in 
    import requests
  File "/usr/local/lib/python3.9/site-packages/requests/__init__.py", line 43, in 
    import urllib3
  File "/usr/local/lib/python3.9/site-packages/urllib3/__init__.py", line 41, in 
    raise ImportError(
ImportError: urllib3 v2 only supports OpenSSL 1.1.1 , currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips  26 Jan 2017'. See: https://github.com/urllib3/urllib3/issues/2168

由以上日志可得报错原因是代码第三行,我引用了requests库,但是requests库里的urllib3依赖openssl1.1.1 版本,但我的服务器openssl版本是 1.0.2k,所以解决的方法就是更新我服务器上的openssl版本为1.1.1

解决过程

先安装相关依赖,执行命令 yum install perl-core zlib-devel -y即可

  1. 执行 wget https://github.com/openssl/openssl/releases/download/openssl-3.1.1/openssl-3.1.1.tar.gz 获取最新版本的openssl
  2. 解压缩安装包tar -zxvf openssl-3.1.1.tar.gz ,然后进入openssl3.1的目录cd openssl-3.1.1/
  3. 指定安装路径 /config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
  4. 执行 make 进行编译,等make完毕后 执行 make install 进行安装
  5. echo "/usr/local/ssl/lib64" > /etc/ld.so.conf.d/openssl.conf 执行这个命令来配置链接库,本质上就是新增了一个openssl配置文件,将里面的引用改成最新的
  6. 执行 ldconfig -v 来更新最新的链接
  7. 执行 whereis openssl 就可以看到原来的openssl是装在usr/bin目录下的。输出是:openssl: /usr/bin/openssl
  8. 现在我们刚刚装的是装在了/usr/local/ssl/bin目录下。所以下一步我们要进行替换,用local目录下的替换掉bin目录下的
  9. 执行 cp /usr/local/ssl/bin/openssl /usr/bin/openssl 来覆盖原来的openssl
  10. 执行 ldconfig -v 再次刷新
  11. 输入 openssl version 若输出是 OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023) 则证明成功了! 虽然折腾到了这里,不过最简单的解决办法,应该是降低requests库的版本,安装一个低版本的requests

0 人点赞