问题描述
我的项目文件结构:
MyProject/
|- src/
packageA/
|- __init__.py
|- moduleA.py
|- Playground/
|- foo.py
|- bar/
|- baz.py
在 Playground/foo.py
和 Playground/bar/baz.py
中,我编写了一些 Python 代码,可以将其视为带有 #%%
的 JupyterNotebook 单元:
# Playground/foo.py & Playground/bar/baz.py
# %% I can run this cell with IPython in VSCode by shift+enter
import sys
print(sys.path)
import packageA
通过 shift + enter
运行单元格后,它们显示:
['{path_to_vscode_workspace}/Playground',...]
ModuleNotFoundError: No module named 'packageA'
路径不包含{path_to_vscode_workspace}
,而是包含foo.py
({path_to_vscode_workspace}/Playground
) 的工作目录。
如何使用 VSCode 特定参数在 settings.json
中设置 python 包搜索路径?
解决方法
如果您在 foo.py
中运行以下代码,您会发现当前工作目录 (cwd) 是 ..\MyProject\Playground
。当然,当前文件夹中没有名为 packageA 的模块:
import os
print(os.getcwd())
在import语句前,在foo.py
和baz.py
中添加如下代码,将cwd改为MyProject:
import os
os.chdir("the absolute path to MyProject")
那么你就可以import src.PackageA
成功:
[更新]
在launch.json中添加以下配置并Run without Debugging
"cwd": "${workspaceFolder}","env": {
"PYTHONPATH":"${workspaceFolder}"
}