Как указать модуль (-m) при использовании отладчика Python? - PullRequest
0 голосов
/ 10 июля 2020

Я хочу отладить модуль Python, который я должен выполнить следующим образом:

python -m ModuleA.ModuleB <someargs>

Как мне настроить переключатель -m на VS Ccode launch.json? Раздел args предназначен для выполняемого скрипта, а не для самого двоичного файла python.

1 Ответ

1 голос
/ 10 июля 2020

Конфигурация запуска Python принимает "module" вместо "program". Он используется в спецификациях отладки c Python приложениях , таких как Flask, Django и Scrapy. Вот пример для Flask приложения , который кажется похожим на то, что вы хотите:

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

Как видите, эта конфигурация определяет "env": {"FLASK_APP": "app.py"} и "args": ["run", "--no-debugger","--no-reload"]. Свойство "module": "flask" используется вместо program.

Итак, учитывая этот пример рабочего пространства с папкой Q, содержащей ModuleA.ModuleB:

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

, где ModuleB - :

import sys

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

Вы можете указать эту запуск. 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')
...