VS Code调试Monorepo中Python文件出现ModuleNotFoundError求助
环境信息
- VS Code v1.74.3
- ms-python.python 插件 v2022.20.2
- Pyenv全局安装 Python v3.9.1
- 项目为Monorepo结构,
dir-2/src/event_producer_1/schemas/cloud_event目录代码由AWS Eventbridge Schema Registry代码绑定功能生成
问题现象
调试main.py时,__init__.py中抛出ModuleNotFoundError: No module named 'schema',但PyCharm可正常调试,已在launch.json设置PYTHONPATH为${workspaceRoot}/dir-2/src/event_producer_1。
解决方案
1. 验证PYTHONPATH实际生效路径
在main.py开头添加以下代码,运行调试后查看控制台输出的路径列表,确认目标目录是否被正确加入:
import sys print("当前PYTHONPATH:", sys.path)
如果${workspaceRoot}/dir-2/src/event_producer_1/schemas/cloud_event(或schemas目录)不在列表中,说明路径设置未覆盖到依赖所在目录。
2. 调整launch.json的PYTHONPATH配置
修改launch.json中的env字段,将schemas目录也加入PYTHONPATH:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "env": { "PYTHONPATH": "${workspaceRoot}/dir-2/src/event_producer_1:${workspaceRoot}/dir-2/src/event_producer_1/schemas" } } ] }
若schema.py直接位于cloud_event目录下,可进一步追加该路径:
"PYTHONPATH": "${workspaceRoot}/dir-2/src/event_producer_1:${workspaceRoot}/dir-2/src/event_producer_1/schemas:${workspaceRoot}/dir-2/src/event_producer_1/schemas/cloud_event"
3. 确认VS Code使用的Python解释器
点击VS Code右下角的Python解释器版本,确认选中的是Pyenv全局安装的Python v3.9.1。若选了其他解释器(如系统Python、虚拟环境),会导致PYTHONPATH设置不生效。
4. 使用.env文件自动加载环境变量
在项目根目录创建.env文件,写入以下内容:
PYTHONPATH=./dir-2/src/event_producer_1:./dir-2/src/event_producer_1/schemas
VS Code的Python插件会自动读取该文件中的环境变量,无需手动修改launch.json即可生效。
5. 检查生成代码的导入逻辑
打开出错的__init__.py,查看导入语句。若生成代码使用了import schema这类绝对导入,而schema.py位于当前目录,可尝试将导入改为相对导入:
from . import schema
注意:修改自动生成的代码可能会在后续重新生成时被覆盖,优先通过调整PYTHONPATH解决。
内容的提问来源于stack exchange,提问作者GreenyMcDuff

