无法升级pip:SSL错误问题求助
关于Python 3.5.5升级pip时SSL报错的解答
先明确你的环境信息:
- 当前pip版本:
pip 9.0.1 from /usr/local/lib/python3.5/site-packages (python 3.5) - Python版本:3.5.5
- OpenSSL版本:1.0.2o 27 Mar 2018
你执行python3.5 get-pip.py时遇到的两个核心问题:SNIMissingWarning和TLSv1协议版本错误,下面逐个解答你的疑问:
疑问一:OpenSSL版本够新,为啥还出TLS协议版本错误?
这问题不在系统的OpenSSL,而是Python 3.5.x的ssl模块默认不支持TLS 1.2作为优先协议。虽然你的系统OpenSSL 1.0.2o是支持TLS 1.2的,但Python 3.5早期版本(比如3.5.5)在编译时,默认的TLS协议上限是TLS 1.1,而现在PyPI已经彻底停用了TLS 1.0/1.1,只接受TLS 1.2及以上的连接请求,所以就出现了这个报错。
简单说:系统OpenSSL有能力,但Python 3.5的ssl模块没调用这个能力。
疑问二:Python 3.5.5为啥会提示SNI不可用?
SNI是TLS的一个扩展,用来让服务器知道你要访问哪个域名,从而返回对应的证书。Python 3.5.x的ssl模块在很多编译环境下,都没有默认启用SNI支持——哪怕系统OpenSSL支持这个功能,Python编译时如果没开相关配置,ssl模块就用不了SNI。
提示里说“升级Python解决”是因为Python 3.6及以后的版本,ssl模块默认就开启了SNI和TLS 1.2+支持,从根源上解决了这些兼容性问题。
临时修复方案(不用升级Python)
如果暂时没法升级Python到3.6+,可以试试这两个办法:
- 本地安装支持Python 3.5的最后一个pip版本(20.3.x):
- 先下载pip 20.3.4的源码包(可从PyPI历史版本库获取)
- 解压后进入目录,执行安装命令:
tar -xzf pip-20.3.4.tar.gz cd pip-20.3.4 python3.5 setup.py install
- 配置pip使用支持旧协议的国内镜像源,避免PyPI的严格限制:
pip3.5 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
内容的提问来源于stack exchange,提问作者Zeno
相关产品推荐
相关产品推荐

