Linux环境运行Python脚本报依赖已满足却缺失requests模块的ImportError
ImportError: No module named requests 问题解决指南 核心根因
当前环境存在Python版本绑定错位问题:
- 系统默认
python命令指向Python 2.7.17,但所有pip操作绑定Python 3.6.9,安装的requests库路径属于Python3的site-packages目录 - 脚本自带的
#!/usr/bin/env pythonshebang会优先匹配到Python2解释器,运行时无法读取Python3路径下安装的第三方库 - 虚拟环境未激活状态下执行脚本,不会加载虚拟环境内安装的依赖
分步修复操作
- 修正脚本解释器指向
将脚本头部的shebang从#!/usr/bin/env python替换为明确匹配Python3的配置:
避免使用泛化的#!/usr/bin/env python3python匹配规则,防止定位到Python2解释器 - 绑定解释器安装依赖
不要直接执行pip install安装,要和目标运行解释器绑定安装,从根源避免pip可见但解释器找不到的问题:
执行后验证模块关联状态:# 对应Python3.6解释器安装requests python3 -m pip install requests
输出python3 -c "import requests; print(requests.__version__)"2.25.1即说明模块关联正常。 - 虚拟环境场景操作
如果使用虚拟环境运行脚本,必须先激活虚拟环境再执行,不可全局直接运行脚本:# 激活虚拟环境 source ./venv/bin/activate # 验证虚拟环境内依赖状态 pip list | grep requests # 执行脚本 ./tele.py - 排除异常干扰项
- 放弃使用
import urllib3.requests的导入方式:requests是独立顶级模块,不属于urllib3的子模块 - 检查脚本所在目录是否存在同名
requests.py文件,避免本地文件拦截正常导入逻辑 - 无需激活虚拟环境时,可直接指定虚拟环境内的Python解释器全路径执行脚本:
/path/to/venv/bin/python ./tele.py
- 放弃使用
高频踩坑提示
- 执行
python -V和pip -V时,必须核对两边绑定的Python版本号完全一致,版本不匹配是pip list能看到库但解释器导入报错的最常见原因 - Python2和Python3的第三方库路径完全隔离:Python2库路径为
/usr/lib/python2.7/dist-packages,Python3库路径为/home/xxx/.local/lib/python3.6/site-packages,两套环境的依赖无法互通
内容的提问来源于stack exchange,提问作者user15226396
相关产品推荐
相关产品推荐

