使用 Python 调试器时如何指定模块 (-m)?

How to specify a module (-m) when using the Python debugger?

我想调试一个 Python 模块,我必须像这样执行它:

python -m ModuleA.ModuleB <someargs>

如何在 VS Ccode 的 launch.json 上配置 -m 开关? args 部分用于正在执行的脚本,而不是 python 二进制文件本身。

Python 启动配置接受 "module" 而不是 "program"。它在 debugging specific Python applications such as Flask, Django, and Scrapy. Here is the sample for a Flask app 中使用,看起来与您想要的相似:

{
    "name": "Python: Flask",
    "type": "python",
    "request": "launch",
    "module": "flask",            # <---------------------
    "env": {
        "FLASK_APP": "app.py"
    },
    "args": [
        "run",
        "--no-debugger",
        "--no-reload"
    ],
    ...
}

As you can see, this configuration specifies "env": {"FLASK_APP": "app.py"} and "args": ["run", "--no-debugger","--no-reload"]. The "module": "flask" property is used instead of program.

因此,假设此示例工作区的文件夹 Q 包含 ModuleA.ModuleB:

$ tree .
.
├── Q
│   └── ModuleA
│       ├── __init__.py
│       └── ModuleB.py
└── .vscode
    └── launch.json

其中 ModuleB 是:

import sys

if __name__ == "__main__":
    print(*sys.argv)

您可以将此 launch.json 配置指定为:

{
    "name": "run-specific-module",
    "type": "python",
    "request": "launch",
    "console": "integratedTerminal",
    "cwd": "${workspaceFolder}/Q",
    "module": "ModuleA.ModuleB",
    "args": [
        "123",
        "abc",
    ]
},

运行 在终端中给出此输出:

$  cd /path/to/Q ; env /path/to/python /path/to/.vscode/extensions/ms-python.python-2020.6.91350/pythonFiles/lib/python/debugpy/launcher 37343 -- -m ModuleA.ModuleB 123 abc 
('/path/to/Q/ModuleA/ModuleB.py', '123', 'abc')

这应该是一样的:

$ python -m ModuleA.ModuleB 123 abc
('/path/to/Q/ModuleA/ModuleB.py', '123', 'abc')