如果你用过 PyCharm,就知道它有个特别方便的功能:Mark Directory as Sources Root。只要点一下,就能把某个目录设为 Python 的根路径,避免 import 时老是报 ModuleNotFoundError。
可是在 VS Code 里,这个按钮是不存在的。那要怎么办呢?别担心,VS Code 也能实现同样的效果,只是需要自己稍微配置一下。
为什么会 import 找不到?
Python 的模块查找规则依赖于 sys.path,默认只包含:
- 当前运行脚本所在目录
- 系统安装的标准库和第三方库路径
如果你的项目长这样:
project/├── app/│ ├── utils/│ │ └── helper.py│ └── main.py└── tests/ └── test_case.py在 test_case.py 里写:
from utils import helper大概率会报错:ModuleNotFoundError: No module named 'utils'。
原因是 Python 并不知道 app/ 应该作为根目录。
方法一:使用 PYTHONPATH(推荐)
VS Code 的 Python 扩展支持读取环境变量 PYTHONPATH,我们可以把需要的目录加进去。
1. 新建 .env 文件
在项目根目录下创建一个 .env 文件,写上:
PYTHONPATH=./app如果你有多个路径(比如 app 和 core),Linux/WSL/macOS 用冒号分隔:
PYTHONPATH=./app:./coreWindows 则用分号:
PYTHONPATH=.\app;.\core2. 修改 .vscode/launch.json
在项目里新建 .vscode/launch.json,写入:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "envFile": "${workspaceFolder}/.env" } ]}这样,每次运行或调试时,VS Code 都会自动把 app/ 当作根目录。
方法二:在 launch.json 里直接写 PYTHONPATH
不想用 .env 文件,也可以直接在配置里写:
"env": { "PYTHONPATH": "${workspaceFolder}/app:${workspaceFolder}/core"}方法三:临时在终端里加
如果只想在命令行里跑,可以这样:
export PYTHONPATH=./app:./core:$PYTHONPATHpython tests/test_case.py(Windows 下用 set PYTHONPATH=.\app;.\core;%PYTHONPATH%)
方法四:做成 Package(进阶)
如果你准备长期维护项目,可以直接把目录做成 package:
-
在根目录放
setup.py或pyproject.toml -
运行:
pip install -e .这样整个项目就能被当作模块使用,VS Code、PyCharm、甚至命令行里都能统一 import。
总结
- PyCharm 有现成的 Sources Root 按钮,点一下就行
- VS Code 需要通过 配置 PYTHONPATH 来模拟同样的效果
- 推荐的做法是:
.env + launch.json,既干净又可复用
这样一来,你在 VS Code 里写 import 时就能和 PyCharm 一样顺畅,再也不用在代码里写乱七八糟的 sys.path.append 了。