python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
问题分析
说明:requests包引入了urllib3,而新版本的urllib3 需要OpenSSL 1.1.1+以上版本,否则报错:
ImportError: urllib3 v2.0 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
三、解决方法
需要升级openssl
下载编译openssl
1. 依赖包
安装编译 OpenSSL 所需的包,包括 gcc、make、perl 和 zlib-devel。可以通过运行以下命令完成:
yum install -y gcc make perl zlib-devel
2. 安装包下载
下载 OpenSSL 1.1.1 的源码包,可以从 OpenSSL 官网下载(https://www.openssl.org/source/openssl-1.1.1.tar.gz)或使用以下命令下载:
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
3. 解压
解压源码包并进入解压后的目录:
tar -zxvf openssl-1.1.1.tar.gz
cd openssl-1.1.1
4.初始化并编译、安装
运行以下命令编译 OpenSSL:
./config --prefix=/opt/openssl-1.1.1
make
make install
5. 添加环境变量
vim /etc/profile
export PATH=/opt/openssl-1.1.1/bin:$PATH
export LD_LIBRARY_PATH=/opt/openssl-1.1.1/lib:$LD_LIBRARY_PATH
source /etc/profile
这会在系统中安装新的 OpenSSL 版本。可以通过运行以下命令检查 OpenSSL 版本:
openssl version
如果输出结果中的版本号为 1.1.1 或更高版本,则说明 OpenSSL 已成功升级。
6. 做软连接
如果还是原来的版本,没变成新版本,可以做软连接使其挂用新版本
将原来的openssl,做备份
mv /usr/bin/openssl /usr/bin/openssl_20230525bak
mv /usr/lib64/openssl /usr/lib64/openssl_20230525bak
然后将新安装的OpenSSL做软连接到这个路径
ln -s /opt/openssl-1.1.1/bin/openssl /usr/bin/openssl
再执行以下命令检查 OpenSSL 版本:
openssl version
完成!!
升级openssl之后,依旧import urllib3 报错
如果你已经确认系统中的OpenSSL显示为新版本,但Python仍然使用旧版本,可能是因为Python解释器没有正确链接到新版本的OpenSSL。
思路1: 重新编译python
重新编译Python是一种解决Python解释器没有正确链接到新版本OpenSSL的方法之一。这可以确保Python使用新版本的OpenSSL库。
配置编译选项:打开命令行终端,切换到Python源代码的目录,并运行以下命令以配置编译选项:
./configure --with-openssl=/path/to/openssl
–with-ssl:表示使用了系统中已安装的 OpenSSL 库。
–with-openssl:表示使用了自带的 OpenSSL 库。
将 /path/to/openssl 替换为新版本OpenSSL库的安装路径。此选项告诉Python编译器在编译过程中使用新版本的OpenSSL。
编译和安装:在命令行终端中运行以下命令以编译和安装重新配置的Python:
make
make install
这将编译Python源代码并将其安装到系统中。注意,在执行sudo make install时,可能需要输入管理员密码。
验证安装结果:重新编译和安装完成后,你可以通过运行以下命令来验证Python解释器是否链接到了新版本的OpenSSL:
python -c "import ssl; print(ssl.OPENSSL_VERSION)"
使用 --with-openssl 亲测可用!推荐~
思路2: 指定Python解释器链接到新版本的OpenSSL,而不重新编译Python
如果你已经安装了新版本的OpenSSL,并且希望指定Python解释器链接到该新版本的OpenSSL,而不重新编译Python,可以通过设置环境变量LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(macOS),将新版本的OpenSSL库路径添加到Python解释器的运行环境中。
例如,假设新版本的OpenSSL库位于 /usr/local/ssl/lib,你可以执行以下操作:
export LD_LIBRARY_PATH=/usr/local/ssl/lib:$LD_LIBRARY_PATH
在Python交互环境中,执行以下代码来查看Python中使用的OpenSSL库的路径:文章来源:https://www.toymoban.com/news/detail-707893.html
import ssl
print(ssl.OPENSSL_VERSION)
print(ssl._ssl.__file__)
我这边测试,无论怎么改LD_LIBRARY_PATH,一直引用的python安装目录下的: lib/python3.8/lib-dynload/_ssl.cpython-38-x86_64-linux-gnu.so
文章来源地址https://www.toymoban.com/news/detail-707893.html
到了这里,关于python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!