Отладка модуля Python с использованием VS Code путем нажатия F5

Моя структура проекта следующая:

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?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
0
2 405
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После некоторых исследований я нашел решение:

  1. Перейдите в верхний правый раздел в меню отладки и щелкните шестеренку, чтобы создать файл launch.json для этого проекта. Это будет использоваться для настройки VS Code.

Configure VS Code

  1. Если файл 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

  1. Просто использование этого ответа у меня не сработало, и я получил сообщение об ошибке: 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",
        }
    ]
}

Другие вопросы по теме