在pytest中发送HTTP请求遇requests导入错误的解决求助
你遇到的核心问题是Python环境不匹配——虽然你已经在系统的Python 3.7环境里装了requests,但pytest实际调用的是另一个Python版本(比如Python 2或者未安装requests的其他3.x环境),导致模块找不到。下面是一步步的解决办法:
第一步:确认pytest使用的Python版本
先搞清楚问题出在哪,运行下面的命令查看pytest绑定的Python版本:
pytest --version
输出会类似这样:
pytest 6.2.5 from /usr/local/lib/python3.7/dist-packages/pytest (Python 3.7)
如果显示的Python版本和你安装requests的版本(比如上面的3.7)不一致,那就是问题的根源。
方法一:用对应版本的pip安装requests
如果pytest用的是Python 3,直接用pip3重新安装requests(确保和pytest的Python版本匹配):
pip3 install requests --upgrade
如果是Python 2的话(不推荐,Flask现在已经不支持Python 2了),就用pip安装。
方法二:用Python模块方式运行pytest
这种方式能强制pytest使用你指定的Python环境,比如你安装了requests的Python 3:
python3 -m pytest test/test_user.py
python3 -m会调用系统中Python 3的pytest模块,确保和你安装requests的环境一致。
方法三:检查并激活虚拟环境(强烈推荐)
如果你开发Flask应用时用了虚拟环境(比如venv、virtualenv),一定要先激活它,否则pytest会用系统环境,而你的依赖可能都装在虚拟环境里:
# 假设你的虚拟环境在项目根目录的venv文件夹下 source venv/bin/activate
激活后再运行pytest,或者重新安装requests到虚拟环境里:
pip install requests
虚拟环境是Python项目管理依赖的最佳实践,能彻底避免系统环境和项目环境的依赖冲突。
方法四:强制指定pytest的Python包路径
如果上面的方法都不行,可以在项目根目录创建pytest.ini文件,指定pytest使用的包路径:
[pytest] python_paths = /usr/local/lib/python3.7/dist-packages
把路径换成你安装requests的那个Python包目录(就是你安装时显示的/usr/local/lib/python3.7/dist-packages),这样pytest会优先从这个路径加载模块。
额外提醒:开发Flask项目时,尽量用虚拟环境或者依赖管理工具(比如Poetry)来管理依赖,这样能避免绝大多数类似的环境问题。
内容的提问来源于stack exchange,提问作者Rahimi0151

