使用嵌套目录进行 VSCode python 模块调试

问题描述 投票:0回答:1

我正在尝试调试目录结构中的模块,如下所示

cwd
├── project_directory
|   | __init__.py
|   ├──dir1
|      ├── __init__.py
|      ├── module1.py
|   ├──dir2
|      ├── __init__.py
|      ├── module2.py

如果我从命令行运行:

python -m project_directory.dir1.module1

代码运行得很好,现在我想配置
launch.json
文件以便调试模块。

{
"version": "0.2.0",
    "configurations": [
        {
            "name": "Python Module",
            "type": "python",
            "request": "launch",
            "console": "integratedTerminal",
            "module": "project_directory.dir1.${fileBasenameNoExtension}",
        }
    ]
}

使用上述启动文件进行调试会导致以下错误:

Error while finding module specification for 'dir1.module1' (ModuleNotFoundError: No module named 'dir1')

令我困惑的是,如果我将 cwd 更改为

project_directory
并编辑
launch.json
文件,使得

"module": "dir1.${fileBasenameNoExtension}"

调试器开始工作。不幸的是,这不是一个可行的解决方案,因为我有相对导入,并且 python 要求我位于

project_directory
的父目录中。

关于如何让调试器工作有什么想法吗?

相对导入的最佳实践是什么,以使它们造成的问题最少?

python visual-studio-code python-import vscode-debugger relative-import
1个回答
0
投票

在 launch.json 中添加 "env":{ "PYTHONPATH": "${workspaceRoot}"} ,以模仿 -m 标志的行为。我用它来解决运行需要依赖的嵌套模块时的导入问题。

答案参考来自 Can't get VSCode/Python debugger to find my Project Modules

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python Module",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "env": { "PYTHONPATH": "${workspaceRoot}"}
        }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.