应优先更新 certifi 证书库,如执行 pip install --upgrade certifi;--trusted-host 仅对命令行显式指定的域名生效,无法递归信任依赖下载中的其他源,故不能根本解决根证书缺失问题。

pip install 报错 SSL certificate verify failed 怎么办
这是典型的证书验证失败,不是网络不通,也不是 pip 坏了,而是 Python 的 ssl 模块找不到可信 CA 证书,或系统/虚拟环境里证书库过期。常见于企业内网、旧版 macOS、Docker 容器、或手动编译的 Python。直接关 SSL 校验只是临时绕过,不是修复。
为什么 --trusted-host 不能解决所有问题
--trusted-host 只影响 HTTP/HTTPS 请求的目标域名校验,不解决根证书缺失问题。比如你用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn requests,仍可能在下载 requests 依赖时因校验 PyPI 主站(pypi.org)失败而中断——因为 --trusted-host 不继承、不递归生效。
- 它只对命令行中显式指定的 host 生效,不覆盖 pip 配置文件里的 index-url 域名
- 如果包元数据里声明了额外源(如
dependency_links),那些域名不会被自动信任 - 某些 pip 版本(如 22.3+)默认禁用
--trusted-host,除非同时加--break-system-packages或运行在用户模式
真正有效的证书修复方式
优先更新证书库,而非绕过校验。Python 默认使用 certifi 包提供的证书 bundle,路径通常是 site-packages/certifi/cacert.pem。出问题时先确认它是否可读、是否过期:
python -c "import certifi; print(certifi.where())"
然后执行:
- 升级
certifi:pip install --upgrade certifi(最常用有效) - 强制重装并验证路径:
pip install --force-reinstall --no-deps certifi - macOS 上若用 Homebrew Python,可能需同步更新系统证书:
brew install ca-certificates && brew link --force ca-certificates - Linux 容器中(如 alpine):安装系统级证书包,例如
apk add ca-certificates,再运行update-ca-certificates
什么时候可以安全地忽略 SSL 校验
仅限离线开发、CI 临时调试、或明确控制镜像源且走内网 HTTP 协议的场景。生产环境、共享虚拟环境、或涉及敏感依赖时禁止使用。
- 临时跳过(当前命令):
pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org requests - 全局禁用(不推荐):
pip config set global.trusted-host "pypi.org pypi.python.org files.pythonhosted.org"(写入pip.conf) - 彻底关闭 SSL 验证(高危):
export PYTHONHTTPSVERIFY=0或修改pip.conf加global.cert = /dev/null—— 这会让 pip 完全不校验证书,中间人攻击风险拉满
证书问题背后往往是环境隔离不彻底或基础镜像陈旧,修证书库比关校验更能暴露真实依赖链缺陷。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











