The advantage of using debugpy and VSCode is the simplicity. Whether you have your application locally or inside a Docker container, as long as you can reach the port exposed by debugy, you can connect to it with VSCode. I love PyCharm, but I have to admit that VSCode is simpler and more flexible in this regard.

Install debugpy

To debug with VSCode, you need to add debugpy to your dev requirements with poetry:

poetry add -G dev debugpy

and start your django development server with:

python -m debugpy --listen 0.0.0.0:5678 src/manage.py runserver

Configure VSCode

You can create a preconfigured “launch.json” file inside the .vscode directory, or press F1 or Ctrl + Shift + P to open the command pallette and search for “Debug: Add Configuration…“. Here is how it would look like:

{
    "configurations": [
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "host": "0.0.0.0",
            "port": 6793,
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}/src/",
                    "remoteRoot": "/web/app/src/"
                }
            ],
            "justMyCode": false,
            "django": true
        }
    ]
}

Some important parameters are:

  • justMyCode: Set this to false, to also be able to debug code inside third party libraries
  • django: This allows you to also debug templates, see VSCode django tutorial
  • pathMappings: This maps the files from your VSCode workspaceFolder to the locations of the files on the remote host. In this case, for example, the source code was mounted with a volume under /web/app. This setting can also be used for remote debugging on any remote server that has debugpy running on some port.