Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLZeroReturnError(6, 'TLS/SSL connection
时间: 2025-03-15 07:19:06 浏览: 491
### 解决方案
当遇到 `ssl certificate error` 或者 `Max retries exceeded with url` 错误时,这通常是因为 Python 尝试验证 HTTPS 连接中的 SSL/TLS 证书失败所致。以下是针对此问题的具体解决方案:
#### 方法一:临时禁用 SSL 验证
可以通过修改默认的 SSL 上下文来跳过证书验证过程。这种方法适用于开发环境或测试场景。
```python
import ssl
import urllib.request
# 创建未验证的上下文
ssl._create_default_https_context = ssl._create_unverified_context
req = urllib.request.Request('https://pypi.org/')
data = urllib.request.urlopen(req).read()
print(data.decode())
```
上述方法通过设置 `_create_default_https_context` 来忽略 SSL 验证[^1]。
---
#### 方法二:更新 `certifi` 和 `urllib3`
如果需要更安全的方式解决问题,则可以安装最新的 CA 证书包并确保依赖库是最新的版本。
运行以下命令以升级必要的模块:
```bash
pip install --upgrade certifi requests urllib3
```
之后,在脚本中指定使用 `certifi` 提供的信任根存储:
```python
import certifi
import requests
response = requests.get('https://pypi.org/', verify=certifi.where())
print(response.text)
```
这样能够有效避免因本地信任链缺失而导致的 SSL 验证错误。
---
#### 方法三:配置 Pip 使用可信主机
对于特定于 PyPI 的问题,可以在执行 pip 命令时强制其忽略 SSL 验证或者显式定义可信赖的主机名。
例如:
```bash
pip install some-package --trusted-host pypi.org --trusted-host files.pythonhosted.org
```
该选项告诉 pip 不要尝试验证这些域名上的 SSL 证书。
---
#### 方法四:修复系统级证书问题
有时操作系统本身的 CA 存储可能已损坏或不完整。在这种情况下,重新导入官方受信 CAs 是一种永久性的解决办法。
在 macOS 下可通过 Homebrew 安装最新版 OpenSSL 并同步更新认证文件;而在 Linux 发行版上则需依据具体发行版文档操作(比如 Ubuntu 用户应考虑运行 apt-get update && apt-get install ca-certificates)。
---
### 注意事项
尽管绕开 SSL 检查能快速解除阻塞,但从长远来看并不推荐这样做,因为会暴露潜在的安全风险。因此建议优先采用第二种方式即保持软件栈处于良好维护状态的同时利用权威机构签发的有效凭证来进行网络通信。
阅读全文
相关推荐













