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

同级子目录模块导入引发ModuleNotFoundError的调试问题求助

同级子目录模块导入引发ModuleNotFoundError的调试问题求助

我完全理解你的需求——想把测试脚本留在scripts目录(专门用于快速验证/临时测试),但导入上级目录的src模块时遇到了ModuleNotFoundError,而且需要在VS Code中调试,不想依赖命令行的-m参数方式。下面给你几个可行的解决方案,不用移动脚本就能彻底解决问题:

方案1:通过VS Code调试配置添加项目根目录到Python搜索路径(推荐,无需修改代码)

VS Code的调试配置可以轻松将项目根目录纳入Python的模块搜索路径,让Python自动识别到src模块。具体步骤:

  1. 打开项目根目录下的.vscode/launch.json(如果没有,按F5启动调试,VS Code会自动生成该文件)。
  2. 在configurations数组中,找到你用来调试当前脚本的配置(通常是"Python: Current File"),添加env字段,将PYTHONPATH设置为项目根目录:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "env": {
                "PYTHONPATH": "${workspaceFolder}"
            },
            "justMyCode": true
        }
    ]
}
  • ${workspaceFolder}是VS Code的内置变量,代表你当前打开的项目根目录(即MusicProcessing)。
  • 配置完成后,再次调试scripts/list_audio_file_test.py时,Python会自动将根目录加入模块搜索路径,就能成功导入src模块了。

方案2:在测试脚本开头手动添加根目录到Python搜索路径(兼容所有环境)

如果你希望脚本在VS Code、命令行等任何环境下都能直接运行,无需依赖IDE配置,可以在list_audio_file_test.py的最顶部添加以下代码,手动将项目根目录纳入Python的搜索路径:

import sys
from pathlib import Path

# 获取项目根目录:当前脚本的父目录的父目录(即MusicProcessing)
project_root = Path(__file__).resolve().parent.parent
sys.path.append(str(project_root))

# 之后正常执行原有导入逻辑
from src.dir_processing import DirectoryProcessing

dir_processing = DirectoryProcessing(r"H:\Music")
dir_processing.get_audio_list_files()
  • Path(__file__).resolve()会获取脚本的绝对路径,.parent.parent则向上两级定位到项目根目录。
  • 这种方法属于轻量级的“临时补丁”,不会影响项目的整体结构,还能保证测试脚本的独立性。

方案3:用VS Code的模块模式调试(替代命令行-m参数)

你提到命令行的python -m scripts.list_audio_file_test不是选项,但其实可以在VS Code中用模块模式调试,效果和命令行-m完全一致,且支持正常断点调试:

修改launch.json的配置为模块运行模式:

{
    "name": "Python: Scripts Module",
    "type": "python",
    "request": "launch",
    "module": "scripts.list_audio_file_test",
    "console": "integratedTerminal",
    "justMyCode": true
}
  • 选择这个配置启动调试时,VS Code会以python -m scripts.list_audio_file_test的方式运行脚本,此时Python会自动将项目根目录作为模块搜索路径的一部分,自然能找到src模块。

错误原因解析

当你直接运行scripts目录下的脚本时,Python会将脚本所在的scripts目录加入模块搜索路径,但项目根目录(MusicProcessing)不在搜索路径中,所以无法找到位于根目录下的src模块。而当你把脚本移到根目录时,根目录被自动加入搜索路径,就能正常导入src了。上面的所有方案本质都是让Python能够定位到项目根目录下的src模块。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:12:59