刚执行完 pip install requests,看到了安装成功,运行代码却仍然提示 ModuleNotFoundError: No module named 'requests'。这时先检查装包和运行代码用的是不是同一个 Python,不要急着卸载或重装整套软件。
本文解决的具体情况:包安装在环境 A,代码却在环境 B 中运行。我们用两个独立虚拟环境实际复现了这个问题,再把包装入运行代码的环境,验证导入成功。其他同名报错仍要结合完整错误判断。
下方四张图片是本机实际执行输出保存为日志后,在 VS Code 中打开的原始窗口截图;不是原生终端操作截图,也不是客户案例。日志中的 RUN 表示执行的子进程命令,文中的代码块提供 PowerShell 写法。
1. 在报错的运行入口中,先打印 Python 路径
把下面两行放在报错脚本最上面、第三方库的 import 之前,再用原来会报错的方式运行。用运行按钮报错,就用同一个按钮检查;不要只在另一个终端里检查。
import sys
print(sys.executable)
记下实际输出的 python.exe 完整路径。接着在 PowerShell 用这个解释器检查包。下面的路径只是占位示例,必须替换为你刚打印出来的路径;前面的 & 和引号要保留。
& "C:\你的项目\.venv\Scripts\python.exe" -m pip show requests
如果显示 Package(s) not found: requests,说明这个解释器对应的安装环境中没有找到 requests 的安装记录。若你之前的安装命令提示成功,就要继续核对当时使用的解释器,而不是凭终端提示符判断。
python -m pip 的作用是让指定的 Python 执行 pip。关键在于前面的 Python 必须正确;随意换成另一个 python 或 py 命令,并不能自动修复解释器错配。
2. 实际复现:A 环境已安装,项目环境仍然报错
为了说明原因,本次实验在一个空测试文件夹中创建了 .venv-a 和 .venv-app 两个独立环境。这些名称只是实验标记,不要求你的现有项目照搬创建。
python -m venv .venv-a
python -m venv .venv-app
.\.venv-a\Scripts\python.exe -m pip install requests==2.32.5
.\.venv-a\Scripts\python.exe -c "import requests; print(requests.__version__)"
.\.venv-app\Scripts\python.exe -c "import requests"
最后一条命令出现下面的错误,而 A 环境输出版本号 2.32.5。同一台电脑上的两个虚拟环境,默认不会共用已安装的第三方包。
ModuleNotFoundError: No module named 'requests'

3. 对照解释器和模块位置,确认错配
本次实验继续打印两个解释器的相对路径,并检查 requests 的模块位置。下图的路径都相对于实验文件夹;排查你自己的项目时,以第 1 步得到的完整路径为准。

| 检查项 | 实验环境 A | 项目环境 |
|---|---|---|
| Python 路径 | .venv-a\Scripts\python.exe | .venv-app\Scripts\python.exe |
| requests | 可导入,版本 2.32.5 | 修复前不可导入 |
| 说明 | 安装发生在这里 | 报错的代码从这里运行 |
如果你的安装环境和运行环境确实不同,有两种处理方向:把运行入口切换到项目本来应使用的环境,或者把项目所需依赖安装到正确的运行环境。先看项目说明、课程要求或已有依赖文件,避免把所有包装入全局 Python。
4. 把包安装到实际运行代码的 Python
本次实验确认 .venv-app 就是项目需要使用的环境,因此直接调用它的解释器安装。为方便复现实验,这里固定 requests 为 2.32.5;这只是本文测试版本,不表示所有项目都应使用这个版本。
.\.venv-app\Scripts\python.exe -m pip install requests==2.32.5
你的实际项目如果提供了 requirements.txt,应先阅读项目的版本要求,再从项目目录用正确解释器安装依赖。例如:
& "C:\你的项目\.venv\Scripts\python.exe" -m pip install -r requirements.txt
没有依赖文件且确实只缺 requests 时,再使用正确解释器安装该包;不要把示例中的路径或包名原样套用于其他项目。本实验为避免个人 pip 配置干扰,执行时另加 --isolated 并明确使用 PyPI;普通项目无需为了这篇教程修改自己的镜像或代理设置。

这里没有激活虚拟环境,而是直接调用环境中的 python.exe。这样也能操作对应环境,不需要为了本次排错去修改 PowerShell 执行策略。
5. 验证导入成功,再运行原来的脚本
.\.venv-app\Scripts\python.exe -c "import requests; print(requests.__version__); print(requests.__file__)"
.\.venv-app\Scripts\python.exe -m pip check
本次实际结果是:项目环境成功导入 requests,模块来自 .venv-app\Lib\site-packages,导入进程退出码为 0;pip check 输出 No broken requirements found.。

最后还要用原来的运行入口重跑你的脚本。若终端已经成功、编辑器运行按钮仍失败,再次在脚本顶部打印 sys.executable,核对按钮实际调用的环境。本文截图展示的是日志文件,不代表已经验证过你的 VS Code 工作区设置。
pip check 通过只说明已安装分发包的依赖关系没有报告冲突,不代表业务代码、网络请求或整个项目都已验证。本实验验证到 requests 导入成功,没有发起外部 HTTP 请求。
6. 仍然报错?先看属于哪一种情况
- 错误里缺的是另一个模块:保留完整 traceback,确认实际缺失对象,不要一直重复安装 requests。
- 运行环境相同,包也存在:检查项目文件名、模块位置以及具体导入语句;安装名称和导入名称也可能不同,需要查对应项目文档。
- 安装本身失败:下载超时、证书报错、权限问题与本篇的环境错配不是同一问题。先处理安装日志中的具体错误。
- 在 Notebook、远程主机、WSL 或容器中运行:应在真正报错的内核或运行环境中打印解释器信息。本次 Windows venv 实验不能当作这些环境已实测通过的证据。
- 只能在当前终端成功:保留解释器完整路径,再回到原来失败的入口核对;终端名称、文件夹名称或“安装成功”的一行提示都不足以证明环境一致。
常见疑问
要不要重装 Python 或 VS Code?
本次实验不需要重装,只需把依赖安装到正确环境。先确认错配原因,再决定是否调整已有安装;不要为了消除一条报错删除仍被其他项目使用的环境。
看到 Requirement already satisfied 为什么仍会失败?
它说明执行该次 pip 检查的安装环境已经满足相应要求,仍需核对运行代码的解释器是不是同一个。用第 1 步的路径和对应 -m pip 命令检查。
可以直接复制本文所有命令吗?
只有在空的测试文件夹中复现实验时,才使用两个实验环境名称。处理现有项目时,请替换为实际解释器路径和项目要求的依赖,先确认环境用途。
还是分不清环境?可以先发截图咨询
请发送 Windows 版本、完整报错、脚本顶部打印的 Python 路径,以及你实际执行的安装命令。发图前遮住账号、密钥等个人信息,不要发送密码或验证码。
我们先确认能否处理、具体范围与费用,再预约远程协助;已有项目排错需单独评估,不自动包含在基础安装套餐中。
发送报错截图咨询查看 Python+VS Code 配置服务实验说明与参考资料
复现方式:两个默认隔离的 venv;A 安装 requests,APP 首次导入失败;APP 安装后再次导入成功。测试使用 Python 3.11.9 与 requests 2.32.5,具体输出以文内实图为准。本文不承诺解决所有 ModuleNotFoundError。