直接运行 python main.py 时同目录导入失败,是因为 Python 只将 main.py 所在目录加入 sys.path,而 VS Code 终端默认 cwd 是项目根目录而非文件所在目录;解决方法包括启用 python.terminal.executeInFileDir 设置、使用 python -m 模式运行或避免硬编码修改 sys.path。

直接运行 python main.py 时同目录导入失败,不是代码写错了,而是 Python 解释器根本没把当前文件所在目录加进 sys.path —— 它只认你“怎么启动”的方式,不认你“文件放在哪”。
为什么 from xxx import yyy 在 VS Code 里报 ModuleNotFoundError
VS Code 默认用当前工作区根目录作为终端启动路径(cwd),但你的 main.py 和 test_file.py 可能都在 src/ 子目录下。此时解释器搜索路径里没有 src/,自然找不到同级的 test_file.py。
- 运行
python main.py时,Python 只把main.py所在目录加入sys.path—— 但 VS Code 的终端默认cwd是项目根目录,不是文件所在目录 -
from .test_file import xxx是相对导入,只能在包内通过python -m方式运行才合法;直接执行会触发SystemError: Parent module '' not loaded - Pylance 报红(如
Import "test_file" could not be resolved)往往和运行时错误不同源:它按静态路径推导,不执行代码,也不读sys.path动态变化
让 VS Code 终端真正“站在文件旁边”运行
这是最轻量、见效最快的修复,适用于单脚本调试或结构简单的项目。
- 打开 VS Code 设置(
Ctrl+,或Cmd+,),搜索python.terminal.executeInFileDir,勾选它 - 或者在
.vscode/settings.json中手动加一行:"python.terminal.executeInFileDir": true - 这样右键「Run Python File in Terminal」时,终端会自动
cd到main.py所在目录再执行,sys.path[0]就是该目录,同级import test_file立刻生效 - 注意:此设置不影响 F5 调试,调试需另配
launch.json中的"cwd": "${fileDirname}"
用 python -m 模式运行(推荐长期项目)
这才是符合 Python 包语义的正解,尤其当你有 __init__.py 和多层结构时。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
- 确保你的目录是合法包:在
src/下放一个空的__init__.py文件 - 不要双击或直接
python src/main.py,而是在项目根目录下执行:python -m src.main - 此时
src/被视为顶层包,main.py中可用from .test_file import Rock(相对导入)或from test_file import Rock(同级导入) - VS Code 中可通过配置
launch.json的"module"字段实现一键调试:"module": "src.main"
别碰 sys.path.append(),除非你只写 demo
在 main.py 开头写 import sys; sys.path.insert(0, '...') 确实能让导入跑通,但它把路径硬编码进代码,带来三个实际麻烦:
- 换机器、换目录就失效,CI/CD 或同事拉代码后立刻报错
- 破坏 PEP 420 隐式命名空间包机制,干扰类型检查和 IDE 跳转
- 和
pip install -e .、python -m等标准工作流冲突,后期重构成本翻倍
真正要警惕的不是“怎么让它跑起来”,而是“为什么只有我这么配才能跑”——那说明路径逻辑已经脱离 Python 原生机制,在协作和部署时必然暴露。

















