写了一个python 小教本,当我放在我的服务器上运行时候发现报错了,今天就来写一下这个报错的解决过程。
报错原因
# 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 <module>
import requests
File "/usr/local/lib/python3.9/site-packages/requests/__init__.py", line 43, in <module>
import urllib3
File "/usr/local/lib/python3.9/site-packages/urllib3/__init__.py", line 41, in <module>
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
即可
- 执行
wget https://github.com/openssl/openssl/releases/download/openssl-3.1.1/openssl-3.1.1.tar.gz
获取最新版本的openssl - 解压缩安装包
tar -zxvf openssl-3.1.1.tar.gz
,然后进入openssl3.1的目录cd openssl-3.1.1/ - 指定安装路径
/config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
- 执行
make
进行编译,等make完毕后 执行make install
进行安装 echo "/usr/local/ssl/lib64" > /etc/ld.so.conf.d/openssl.conf
执行这个命令来配置链接库,本质上就是新增了一个openssl配置文件,将里面的引用改成最新的- 执行
ldconfig -v
来更新最新的链接 - 执行
whereis openssl
就可以看到原来的openssl是装在usr/bin目录下的。输出是:openssl: /usr/bin/openssl - 现在我们刚刚装的是装在了/usr/local/ssl/bin目录下。所以下一步我们要进行替换,用local目录下的替换掉bin目录下的
- 执行
cp /usr/local/ssl/bin/openssl /usr/bin/openssl
来覆盖原来的openssl - 执行
ldconfig -v
再次刷新 -
输入
openssl version
若输出是OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
则证明成功了!虽然折腾到了这里,不过最简单的解决办法,应该是降低requests库的版本,安装一个低版本的requests