pip安装hidapi失败:原因诊断、测试及解决方法问询
解答你的hidapi安装与TLS版本问题
嘿,我来帮你拆解这个安装hidapi时遇到的TLS问题,一个个来解答你的疑问:
1. 现有信息是否足以明确安装失败的原因?
完全可以!你碰到的[TLSV1_ALERT_PROTOCOL_VERSION] SSL证书验证错误,再加上检测到Python TLS版本是1.0,核心原因已经很清晰了:现在PyPI官方服务器早就停止支持TLS 1.0/1.1这两个过时协议了,只接受TLS 1.2及以上版本的连接请求。你的pip在连接PyPI时用了TLS 1.0,直接被服务器拒绝,所以安装失败。
2. 需要执行哪些测试来排查问题以采取纠正措施?
可以做这几个简单的测试来确认细节,确保后续的纠正措施精准:
- 检查pip的实际TLS使用情况:执行
pip install --verbose requests,看输出日志里的TLS协议相关内容,确认是不是真的在使用TLS 1.0 - 查看系统OpenSSL版本:运行
openssl version,因为Python的TLS支持依赖系统的OpenSSL库,如果OpenSSL版本低于1.0.1,根本没法支持TLS 1.2 - 验证Python ssl模块的支持:打开Python交互窗口,输入
import ssl; print(ssl.OPENSSL_VERSION); print(ssl.PROTOCOL_TLSv1_2),如果报错说PROTOCOL_TLSv1_2不存在,说明你的Python版本太老,原生不支持TLS 1.2 - 测试系统层面的TLS连接:用
curl -v https://pypi.org/simple/hidapi/,看返回的TLS握手信息,确认系统本身能不能正常用TLS 1.2连接PyPI
3. 若信息充足,正确的纠正措施是什么?
结合你的情况,按优先级推荐这些纠正方法:
- 优先升级Python版本:如果你的Python是2.7.x或者3.4及以下版本,这些版本默认不支持TLS 1.2,建议直接升级到Python 3.7及以上(现在PyPI要求的最低支持版本是3.7),从根源解决TLS支持问题
- 单独升级pip到兼容版本:如果暂时没法升级Python,可以用get-pip.py脚本绕过TLS限制来升级pip。执行:
升级完pip后,再尝试安装hidapi应该就能正常连接了# 针对Python 3.x curl https://bootstrap.pypa.io/get-pip.py | sudo python3 # 针对Python 2.7(仅临时应急,建议尽快升级Python) curl https://bootstrap.pypa.io/pip/2.7/get-pip.py | sudo python - 升级系统OpenSSL库:如果系统的OpenSSL版本低于1.0.1,先升级OpenSSL(比如Ubuntu用
sudo apt install openssl),如果你的Python是源码编译的,还要重新编译Python才能用上新的OpenSSL支持 - 临时绕过SSL验证(不推荐):如果只是临时测试,可以给pip加参数跳过证书验证:
但这个方法有安全风险,只能临时用,别长期依赖sudo pip install hidapi --trusted-host pypi.org --trusted-host files.pythonhosted.org
4. 此处的“interpreter”具体指什么(属于Python还是pip?),如何升级?
这里的interpreter就是Python解释器,属于Python本身——pip其实是一个运行在Python解释器上的工具,它的TLS支持完全依赖Python解释器的能力。
升级Python解释器的方式分两种:
- 用系统包管理器升级(推荐):比如在Debian/Ubuntu系统上,执行:
之后可以用sudo apt update && sudo apt install python3.10 # 替换成你想要的目标版本update-alternatives设置默认的Python版本:sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 - 从源码编译安装:如果系统包管理器里没有你需要的版本,可以从Python官网下载对应版本的源码包,解压后执行:
用./configure --enable-optimizations make -j$(nproc) sudo make altinstallaltinstall不会覆盖系统默认的Python版本,避免破坏系统自带的依赖
内容的提问来源于stack exchange,提问作者gatorback




