You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

激活Poetry虚拟环境且安装依赖后,VS Code调试仍报ModuleNotFoundError?

问题分析与解决

问题背景

使用VS Code+Poetry环境调试Python代码时,终端运行正常但按F5调试会抛出ModuleNotFoundError: No module named 'app',相关信息如下:

文件夹结构

├── poetry.lock
├── pyproject.toml
├── README.md
└── src
    ├── app
    │   ├── api
    │   ├── core
    │   │   ├── config.py
    │   │   ├── __pycache__
    │   │   └── worker.py
    │   ├── crud
    │   ├── __init__.py
    │   ├── lib
    │   │   ├── be.py
    │   │   ├── __init__.py
    │   │   ├── logger.py
    │   │   ├── omoi.py
    │   │   └── __pycache__
    │   └── main.py

main.py代码

import argparse
import lib.logger
from core.config import settings
from core.worker import Worker


if __name__ == "main":
    parser = argparse.ArgumentParser(description='Basic Worker')
    parser.add_argument('--mode', type=str,
                        choices=['test', 'dummy', 'prod'],
                        default='prod')
    args = parser.parse_args()
    mode = args.mode
    main_worker = Worker()
    main_worker.start()

环境确认

已使用Poetry创建的解释器,终端状态栏显示:

service on main [✘!?] is 📦 v0.1.0 via 🐍 v3.10.6 (service-v4nvssyk-py3.10)

调试错误信息

ModuleNotFoundError
No module named 'app'
  File "/home/me/service/src/app/lib/logger.py", line 4, in <module>
    from app.core.config import settings
  File "/home/me/service/src/app/main.py", line 2, in <module>
    import lib.logger

当前launch.json配置

{
    "configurations": [
        {
            "name": "Python: current file",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": true,
            "env": { "PYTHONPATH": "${workspaceRoot}"}
        }
    ]
}

问题原因

  1. PYTHONPATH配置错误:调试时设置的PYTHONPATH为工作根目录(service),但app模块实际位于service/src下,Python无法从工作根目录定位到app模块。终端运行时是在service/src/app目录执行python main.py,当前目录会被自动加入Python路径,且Poetry环境可能自动处理了路径映射,而调试时未正确配置路径。
  2. 导入方式冲突:main.py使用相对路径导入(import lib.logger、from core.config import settings),但logger.py使用绝对路径导入(from app.core.config import settings),当src目录不在Python路径中时,绝对导入会失败。
  3. 入口判断拼写错误:main.py中的if __name__ == "main"是错误写法,正确应为if __name__ == "__main__",虽不直接导致导入错误,但会使入口逻辑无法触发。

解决方法

方法1:修正launch.json的PYTHONPATH

将PYTHONPATH改为${workspaceRoot}/src,让Python能找到app模块:

{
    "configurations": [
        {
            "name": "Python: current file",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": true,
            "env": { "PYTHONPATH": "${workspaceRoot}/src"}
        }
    ]
}

方法2:统一导入方式

若偏好相对导入,修改logger.py中的导入语句为相对路径:

# logger.py
from ..core.config import settings

方法3:修正入口判断语句

同步修正main.py的入口判断,确保代码逻辑能正常执行:

if __name__ == "__main__":
    # 原有业务逻辑

内容的提问来源于stack exchange,提问作者gdm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:57:24