Моя структура проекта следующая:
Project Folder
--setup.py
----Module Folder
------ __init__.py
------ __main__.py
Мой файл __main__.py содержит точку входа в мое приложение, а файл установки настроен следующим образом:
from setuptools import setup
setup(name='my_project',
version='0.1.0',
packages=['my_project'],
entry_points = {
'console_scripts': [
'my_project= my_project.__main__:main'
]})
Это означает, что я могу запустить свой код без прикрепленного отладчика, используя:
python -m my_project
Я пробовал отладку с помощью VS Code, перейдя к моему файлу __main__.py и нажав F5 для запуска, но это не работает и вызывает исключение. Как мне настроить Visual Studio Code для запуска этого модуля в режиме отладки?
Также как мне убедиться, что программа также запускает модуль, а не файл, который я просматриваю, когда я нажимаю F5?






После некоторых исследований я нашел решение:
launch.json для этого проекта. Это будет использоваться для настройки VS Code.launch.json еще не создан, вставьте в него следующее:{
"version": "0.2.0",
"configurations": [
{
"name": "Python Module",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"pythonPath": "${config:python.pythonPath}",
"module": "my_project",
"cwd": "${workspaceRoot}",
}
]
}
Я нашел здесь этот код: https://github.com/DonJayamanne/pythonVSCode/issues/518#issuecomment-260838308
Просто использование этого ответа у меня не сработало, и я получил сообщение об ошибке: No module named my_project, но я нашел этот ответ: https://github.com/DonJayamanne/pythonVSCode/issues/826
В последнем комментарии говорится, что вам нужно добавить в конфигурацию следующее.
"env": {"PYTHONPATH":"${workspaceRoot}"},
Это исправляет ошибку, и теперь вы можете нажать F5, и ваш модуль будет отлажен.
Принятый ответ у меня не сработал (VSCode 1.49.0), и я получил сообщение об ошибке: Invalid message: "program", "module", and "code" are mutually exclusive.
Удаление линии "program": "${file}", решило проблему. Я думаю, это имеет смысл, поскольку определение как модуля (с подразумеваемой точкой входа), так и файла является избыточным.
Мой launch.json выглядит так:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Module",
"type": "python",
"request": "launch",
"console": "integratedTerminal",
"module": "my_project",
}
]
}