Linux下Python2.6运行requests报certifi缺失及Auth头异常求助
问题根因定位
从完整回溯栈可以明确,报错并非来自Authorization请求头配置环节——整个报错发生在Python初始化导入requests库的阶段,还未执行到编写的业务代码,具体根因有两点:
- 核心致命问题:Python 2.6运行环境缺失适配版本的
certifi模块。回溯栈最后一行明确显示导入失败发生在from certifi import where语句,requests 2.18.4版本将certifi作为强依赖,无该模块时requests库无法完成初始化加载。 - 前置兼容问题:当前环境内安装的urllib3 1.22、chardet 2.2.1版本,与requests 2.18.4的官方兼容版本要求不匹配,是导入阶段抛出依赖告警的原因。该告警本身不直接引发崩溃,但会提升依赖链不稳定的概率。
分步解决操作
- 安装适配Python 2.6的certifi版本。注意Python 2.6无法兼容过高版本的certifi,
certifi==2018.1.18是最后支持Python 2.6的稳定版本,执行安装命令:pip install certifi==2018.1.18
安装完成后执行验证命令:python -c "import certifi; print(certifi.__version__)",能正常打印版本号即代表模块导入正常。 - 修正依赖版本匹配问题。安装与requests 2.18.4完全兼容、同时支持Python 2.6的urllib3和chardet版本,对应安装命令:
pip install urllib3==1.24.3 chardet==3.0.4
安装完成后,之前抛出的RequestsDependencyWarning告警会自动消失。 - 全链路验证导入状态。执行简易导入测试:
python -c "from requests import post, Session; print('requests初始化正常')"
能正常输出提示,即代表之前的回溯报错已完全解决。 - 注意:代码内的Authorization请求头语法本身无错误,不属于本次报错的诱因。待导入问题解决后,如果调用HTTPS接口时遇到证书校验失败,可在
post()方法中添加verify=False参数临时跳过校验(生产环境不建议长期使用该配置),这类报错与当前遇到的ImportError无关联。
内容的提问来源于stack exchange,提问作者Irfan
相关产品推荐
相关产品推荐

