挂代理后pip install报错‘SSLError(SSLEOFError

当使用带HTTP代理的pip安装库时遇到SSLError,原因是pip内嵌的urlib3升级支持HTTPS,导致与仅支持HTTP的代理不兼容。解决办法是设置HTTPS_PROXY环境变量。作者提到之前编译Open3D时第三方库依赖也涉及这个问题,但更换为HTTPS源后下载速度提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

挂代理后pip install报错‘SSLError(SSLEOFError(8, ‘EOF occurred in violation of protocol (_ssl.c:

有使用系统代理,使用pip install 的时候出现SSLError错误,找到下面这篇文章:

在挂了代理之后用pip下载库,出现报错,关了又恢复正常,不过要使用阿里,清华源,不然下载很慢
原因:
在网上搜了是由于新版本的pip内嵌了urlib3的包 而这个包之前(≤1.25.11)是只支持http协议的,而正好代理也是支持http协议,所以相安无事,但urlib3版本更新之后支持https了,而代理仍然只支持http协议,导致握手出现问题。(我是半桶水,大概是这个意思,具体可以看下面的参考链接)
解决方法:
修改用户环境变量即可,
添加变量:HTTPS_PROXY
变量值:http://127.0.0.1:7890
重新打开命令行工具使环境变量生效

之前用源代码编译Open3D,需要使用第三方库,第三方库基本都是https协议下载,再次尝试编译,发现下载压缩包的速度很快。

ubuntu@ubuntu:~$ pip install protobuf==3.20.3 Defaulting to user installation because normal site-packages is not writeable WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)'))': /simple/protobuf/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)'))': /simple/protobuf/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)'))': /simple/protobuf/ WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)'))': /simple/protobuf/ WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)'))': /simple/protobuf/ Could not fetch URL https://pypi.org/simple/protobuf/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/protobuf/ (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)'))) - skipping ERROR: Could not find a version that satisfies the requirement protobuf==3.20.3 (from versions: none) ERROR: No matching distribution found for protobuf==3.20.3
03-14
<think>好的,我现在需要解决用户在Ubuntu上使用pip安装protobuf时遇到的SSL证书验证失败的问题。根据用户提供的引用信息,我需要先分析可能的原因,并给出相应的解决方案。 首先,用户提到了引用[1]中的内容,指出Python 3.7之后依赖的OpenSSL版本需要是1.1或更高,而Ubuntu自带的版本可能过低。这可能导致pip无法使用SSL模块,从而出现SSLError。因此,首先应该检查系统安装的OpenSSL版本是否过低,如果确实如此,就需要升级OpenSSL。 接下来,引用[2]显示下载时出现了SSL握手失败,提示找不到有效的证书路径。这可能是因为系统的根证书缺失或过时,导致无法验证服务器的证书。这种情况下,用户可能需要手动更新根证书,或者使用信任的证书包,比如安装ca-certificates包。 然后,引用[3]提到用户尝试使用阿里云镜像安装pip,但可能遇到了旧版pip不支持的问题。这说明用户可能在使用较旧的Ubuntu版本(如14.04),而该版本默认的pip版本可能过旧,不支持必要的SSL配置。因此,可能需要升级pip或使用镜像源时指定信任主机。 综合这些信息,我需要分步骤指导用户解决问题: 1. 更新系统软件包和ca-certificates,确保根证书是最新的。 2. 升级OpenSSL到兼容的版本,以支持Python所需的SSL模块。 3. 重新编译Python,确保其正确链接到新安装的OpenSSL。 4. 在pip安装时使用信任的镜像源,并添加信任参数跳过证书验证(临时解决方案)。 5. 如果证书问题依然存在,手动下载并安装protobuf的whl文件,或者更新证书路径。 同时,需要提醒用户使用--trusted-host可能存在安全风险,建议优先修复证书问题。另外,如果用户使用的是旧版Ubuntu,可能需要考虑升级系统或使用虚拟环境来避免依赖冲突。 最后,需要验证每个步骤的正确性,确保命令适用于Ubuntu系统,并引用相关的引用来源作为支持。可能还需要生成相关问题,帮助用户进一步理解SSL配置和Python环境管理。</think>### 分步解决方案 #### 1. 更新系统证书和OpenSSL库 SSL证书验证失败通常由以下原因导致: - **系统根证书过期或缺失**:Ubuntu系统可能未包含最新根证书 - **OpenSSL版本过低**:Python依赖的OpenSSL库版本不兼容 **步骤:** ```bash # 更新系统软件包列表 sudo apt update # 安装最新CA证书(引用[2]证书链问题) sudo apt install --reinstall ca-certificates # 升级OpenSSL到1.1.x版本(引用[1]版本依赖问题) wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -xzvf openssl-1.1.1w.tar.gz cd openssl-1.1.1w ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl make sudo make install # 更新动态链接库配置 echo '/usr/local/ssl/lib' | sudo tee /etc/ld.so.conf.d/openssl-1.1.1w.conf sudo ldconfig ``` #### 2. 重新编译Python(如果使用自编译Python) 若Python未正确链接新OpenSSL,需重新编译: ```bash # 配置时指定新OpenSSL路径 ./configure --with-openssl=/usr/local/ssl make sudo make install ``` #### 3. 使用镜像源并跳过证书验证(临时方案) 通过阿里云镜像安装并添加信任参数(引用[3]镜像使用): ```bash pip install protobuf==3.11.4 \ -i https://mirrors.aliyun.com/pypi/simple/ \ --trusted-host mirrors.aliyun.com ``` #### 4. 强制更新pip工具 ```bash curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py --force-reinstall ``` ### 验证安装 ```bash python -c "import ssl; print(ssl.OPENSSL_VERSION)" # 应显示OpenSSL 1.1.1w pip install protobuf # 检查是否仍报错 ``` ### 补充说明 | 现象 | 原因 | 解决方案 | |------|------|----------| | `SSLError("Can't connect...")` | OpenSSL版本不兼容[^1] | 升级OpenSSL并重编Python | | `SSLHandshakeException` | 根证书缺失[^2] | 更新ca-certificates | | 镜像源下载失败 | 旧版pip不支持TLS1.2[^3] | 使用--trusted-host参数 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值