如何解决main.py在子文件夹时导入source模块的ModuleNotFoundError
模块导入失败问题解决
项目结构
Project_root (folder) source (folder) main.py functions(folder) test.py __init__.py (empty)
(注:根据描述修正结构格式,推测main.py位于source子文件夹下,这是导致导入失败的场景)
错误原因
当main.py在项目根目录的子文件夹中时,Python默认模块搜索路径(sys.path)不包含项目根目录,因此无法识别source模块。
解决方法
方法1:手动添加项目根目录到搜索路径
修改main.py,在导入模块前将项目根目录加入sys.path:
import os import sys # 获取当前文件的父目录的父目录(即项目根目录) root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(root_dir) from source.functions import test test.hello()
方法2:使用相对导入(需按模块方式运行)
如果main.py和functions同属source文件夹,可改用相对导入:
# main.py中修改导入语句 from .functions import test test.hello()
运行时需从项目根目录执行命令:
python -m source.main
(直接运行python source/main.py会报错,因为此时main.py被当作顶层脚本,相对导入规则不生效)
方法3:配置VS Code工作区与运行环境
- 在VS Code中打开
Project_root文件夹作为工作区; - 打开
.vscode/launch.json(若不存在则创建),添加或修改配置:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "cwd": "${workspaceFolder}", "console": "integratedTerminal" } ] }
这样运行时的当前工作目录会被设置为项目根目录,Python自动将根目录加入搜索路径,即可正常导入source模块。
内容的提问来源于stack exchange,提问作者Peter Yu
相关产品推荐
相关产品推荐

