python -- NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+

报错分析

  • 完整的报错:urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  • 报错分析:LibreSSL 是 OpenSSL 的一个分支,LibreSSL 2.8.3 与OpenSSL 1.1.1版本相似(有差异)。Mac版python里的ssl默认使用LibreSSL 2.8.3 编译,也就是OpenSSL 1.1.1。而urllib3 v2仅支持OpenSSL 1.1.1以上的版本,因此MAC版python里的ssl版本落后了。

解决办法:

  1. 升级LibreSSL(没用,LibreSSL升级了但是python里的ssl库没更新)
shell 复制代码
# 查看当前用户,确保非root(id 不为0)
whoami
# 查看是否是root
id -u

# 修改目录权限
sudo chown -R $(whoami) /opt/homebrew

# 升级libressl
brew update
brew upgrade libressl

# 设置libressl环境变量
echo 'export PATH="/opt/homebrew/opt/libressl/bin:$PATH"' >> ~/.zshrc
# 设置编译器环境变量:为了让编译器找到 LibreSSL
echo 'export LDFLAGS="-L$(brew --prefix openssl)/lib"' >> ~/.zshrc 
echo 'export CPPFLAGS="-I$(brew --prefix openssl)/include"' >> ~/.zshrc

# 使生效
source ~/.zshrc

# 查看版本
openssl version
>LibreSSL 3.9.1
  1. urllib3降级(可行,但有种越混越回去的感觉)
shell 复制代码
pip install 'urllib3<2.0'
  1. 虚拟环境单独安装对应版本的urllib3 和 OpenSSL

  2. 重新源码编译python

shell 复制代码
./configure --with-openssl=$(brew --prefix openssl)
# ./configure --with-openssl=$(brew --prefix libressl)

make
sudo make install
  1. 忽略警告
shell 复制代码
import warnings
from urllib3.exceptions import NotOpenSSLWarning
warnings.filterwarnings("ignore", category=NotOpenSSLWarning)
相关推荐
Ajiang282473530439 分钟前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空44 分钟前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou4 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书4 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
----云烟----6 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024066 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it6 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎