VSCode导入Python项目根目录文件出现ModuleNotFound错误如何解决
问题根因
- Python运行时导入模块依赖
sys.path列表中的搜索路径,VSCode可以正常跳转是因为它默认将工作区根目录加入了Python的模块搜索路径,而直接运行脚本时Python只会把当前执行脚本所在目录、标准库路径、第三方包路径加入sys.path,路径不匹配就会触发ModuleNotFoundError。 - 你在代码中混用了两种导入规则:
functions.py中用app.config的绝对导入要求app的父目录在sys.path中,而testing.py中用import config的相对同级导入要求app目录本身在sys.path中,两种路径要求冲突,运行时必然有一种导入找不到模块。 - 要将文件夹识别为Python可导入的包,需要文件夹下存在
__init__.py文件(可以是空文件),你的目录结构中缺少这个文件也会导致导入失败。
解决方案
第一步:规范目录结构
在app目录和labor目录下各添加一个空的__init__.py文件,调整后目录结构如下:
/app __init__.py /labor __init__.py config.py functions.py config.py testing.py
第二步:统一使用绝对导入
所有导入都从顶层包app开始写,避免路径歧义:
functions.py中的导入保持原写法即可:import app.config as app_configtesting.py中的导入修改为:import app.config as app_config import app.labor.config as labor_config print("test")
第三步:用模块方式运行脚本
不要直接执行python testing.py,切换到app目录的上层目录(也就是你的项目根目录),用-m参数以模块方式运行:
python -m app.testing
这种方式会自动将当前执行命令的目录加入sys.path,可以匹配所有绝对导入的路径要求。
可选:适配VSCode终端运行
如果需要在VSCode终端中直接运行脚本也能正常导入,可以在工作区的.vscode/settings.json中添加配置,自动将项目根目录加入Python搜索路径:
// macOS 配置 "terminal.integrated.env.osx": { "PYTHONPATH": "${workspaceFolder}" }, // Windows 配置 "terminal.integrated.env.windows": { "PYTHONPATH": "${workspaceFolder}" }, // Linux 配置 "terminal.integrated.env.linux": { "PYTHONPATH": "${workspaceFolder}" },
内容的提问来源于stack exchange,提问作者programming_ocd
相关产品推荐
相关产品推荐

