写了一个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
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
即可
wget https://github.com/openssl/openssl/releases/download/openssl-3.1.1/openssl-3.1.1.tar.gz
获取最新版本的openssltar -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/opensslcp /usr/local/ssl/bin/openssl /usr/bin/openssl
来覆盖原来的opensslldconfig -v
再次刷新openssl version
若输出是 OpenSSL 3.1.1 30 May 2023 (Library: OpenSSL 3.1.1 30 May 2023)
则证明成功了!
虽然折腾到了这里,不过最简单的解决办法,应该是降低requests库的版本,安装一个低版本的requests