在使用VS Code调试器时,尽管已经激活了虚拟环境,仍然出现 "ModuleNotFoundError: No module named 'streamlit'"

编程语言 2026-07-11

我在VS Code中开发一个Streamlit应用。为这个项目我创建了一个虚拟环境(venv),在终端中激活它,并安装了所有依赖项(包括streamlit)。

当我在终端里使用 streamlit run app.py 运行应用时,一切都正常。然而,当我试图在VS Code调试器中调试时,它会立即失败,错误信息是:ModuleNotFoundError: No module named 'streamlit'

我遇到的问题和这个 问题 中描述的差不多,但那里给出的解决办法只是说“我的解释器没有正确指向虚拟环境中的Python”,这不是我的情况。

我尝试过的办法:

  • 在VS Code的状态栏中选择正确的解释器(例如,如此处 所推荐的)。
  • 添加一个 launch.json,其中包含 "type": "python""request": "launch"。就像在这篇 帖子 中所示,但对该文件还有很多其他变体,且都没有起作用。
  • 确认 pip list 显示已安装Streamlit。
  • 确保我处在 环境 中。

为什么调试器看不到在终端里显然可用的模块?

解决方案

经过大量时间的摸索,我发现问题源于shell环境与VS Code调试引擎之间的“静默断开”。尽管解释器设置正确,调试器往往尝试把脚本当作普通的Python文件(python app.py)来运行,而不是通过Streamlit CLI,或者即使路径中有json文件,它也未能继承venv的 PATH

使用 python -m pip 以避免“幽灵”安装

首先要明确我想使用的Python,并使用

python -m pip install

而不是使用默认的 pip install,因为有时默认会回退到全局或缓存的pip,即使在“激活”的虚拟环境中也是如此。使用 pip install 可能会导致(在我看来确实如此)一个碎片化的环境:终端能看到包,但特定的venv Python可执行文件却看不到。

始终使用虚拟环境中具体的Python二进制来安装依赖:

# Ensure you are targeting the exact venv binary
./venv/bin/python -m pip install -r requirements.txt

使用“Module”启动配置

按照另一篇文章的建议,创建一个明确调用 streamlit 模块的 .vscode/launch.json 并定义要使用的命令和Python也是必不可少的。使用 ${workspaceFolder} 变量,确保在绝对路径不同的情况下也能工作。

JSON

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Streamlit Debug",
            "type": "python",
            "request": "launch",
            "module": "streamlit",
            "python": "${workspaceFolder}/venv/bin/python", // Points directly to venv
            "args": [
                "run",
                "${workspaceFolder}/app.py",
                "--server.port", "8501"
            ],
            "console": "integratedTerminal",
            "justMyCode": true
        }
    ]
}

注:在Windows上,请使用 "${workspaceFolder}/venv/Scripts/python.exe"

---

如果错误仍然存在,请在终端中运行以下命令,以确认模块实际位于何处:

Bash

./venv/bin/python -m streamlit --version

如果这返回 No module named streamlit,说明venv的内部 site-packages 文件夹中缺少该软件包,必须使用上面的命令重新安装。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章