Linux运行Python脚本报缺少requests模块,pip却提示已安装的异常
问题根因定位
你遇到的pip显示已安装、但脚本导入失败的核心矛盾是:执行脚本用的Python解释器,和pip绑定安装包的Python解释器并非同一版本,二者的模块搜索路径完全独立。
具体对应到你的报错场景:
- 你执行
python 47138.py时启动的是Python 2.x版本解释器(Debian/Ubuntu系Linux默认的命令别名规则),这个解释器的模块搜索路径里压根不包含pip3装包的目录,你可以通过执行which python、which pip3两个命令验证路径差异,大概率会看到两个命令对应的路径完全分属Python2和Python3的不同安装目录。 - 你执行
pip3 install requests时,pip3本身是和Python 3.x绑定的工具,安装的requests包存放在/usr/lib/python3/dist-packages路径下,这个路径只有Python3解释器会去检索。 - 你尝试卸载时看到的权限提示,是因为
/usr/lib/python3/dist-packages是系统级受保护目录,存放的是发行版预装给系统Python3的依赖包,普通用户权限下无法对这个路径的文件做修改删除,这是系统的常规保护机制,不是异常。- 注意:完全不需要尝试卸载系统路径下的预装requests包,这类包是Linux发行版为自身系统工具配套安装的依赖,随意卸载反而可能导致系统自带的Python脚本运行异常。
可直接落地的解决方法
按照你实际的运行需求选对应方案即可:
- 如果你本来就需要用Python3运行这个脚本
- 直接替换脚本启动命令,不要用
python,改用和装包路径匹配的解释器启动:python3 47138.py,正常情况下可以直接识别到系统预装的requests模块,无需额外安装。 - 如果替换命令后依然提示导入失败,用绑定解释器的pip命令补装到用户目录下,绕开系统目录权限限制:
python3 -m pip install --user requests,这个命令会把requests安装到当前用户的Python3专属模块路径下,不会改动系统目录的预装包。
- 直接替换脚本启动命令,不要用
- 如果你确实需要用当前指向Python2的
python命令运行脚本- 先给当前Python2解释器配置对应的pip工具,再通过解释器绑定的方式安装依赖,保证包装到Python2的搜索路径下:
python -m pip install requests,装完后再运行脚本即可正常导入。
- 先给当前Python2解释器配置对应的pip工具,再通过解释器绑定的方式安装依赖,保证包装到Python2的搜索路径下:
- 通用校验方法
装完依赖后先做单行验证,确认目标解释器可以正常加载requests:- 对应Python3环境执行:
python3 -c "import requests; print('模块加载成功,版本号:', requests.__version__)" - 对应Python2环境执行:
python -c "import requests; print('模块加载成功,版本号:', requests.__version__)"
只要命令能正常输出版本号,后续运行脚本就不会再出现导入报错。
- 对应Python3环境执行:
内容的提问来源于stack exchange,提问作者Rishabh Nigam
相关产品推荐
相关产品推荐

