Debug Python en Docker con VSCode

Paso a paso para configurar el debugger remoto de VSCode con debugpy en un contenedor Docker, incluyendo buenas prácticas con Pyenv y Poetry.
Python
Docker
VSCode
DevTools
Published

May 1, 2023

Guia paso a paso para configurar el debugger de VSCode con una app Python corriendo en Docker.

Pasos

1. Instalar debugpy

docker-compose run --rm api pip install debugpy

2. Incluir debugpy al inicio de main.py

import debugpy
debugpy.listen(("0.0.0.0", 5678))

3. Abrir el puerto en docker-compose.yml

api:
  ...
  ports:
    - 5678:5678

4. Agregar launch.json en .vscode

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceRoot}/src",
                    "remoteRoot": "/app"
                }
            ],
            "justMyCode": true
        }
    ]
}

5. Levantar los contenedores y agregar un breakpoint() para testear.

Pyenv & Poetry: buenas prácticas

  1. Instalar Pyenv
  2. Instalar version de Python: pyenv install 3.9
  3. Activar version: pyenv global 3.9 o pyenv local 3.9 para un proyecto
  4. Instalar Poetry con version especifica: pip install poetry==1.2.1
  5. Configurar virtualenv local: poetry config --local virtualenvs.create true && poetry config --local virtualenvs.in-project true
  6. Instalar dependencias: poetry install
  7. Verificar entorno: poetry env info
  8. Seleccionar interprete en VSCode: CMD + SHIFT + P → “Select Interpreter”

Comandos Poetry utiles

poetry add <paquete>        # agregar dependencia
poetry run <comando>        # ejecutar en el entorno
poetry shell                # activar entorno virtual
poetry env info --path      # path del interprete
pyenv versions              # listar versiones instaladas

Key points

  • Pyenv permite gestionar multiples versiones de Python.
  • Poetry permite gestionar dependencias por proyecto.
  • Si usas Docker, la version de Poetry en el Dockerfile debe coincidir con la que usas localmente para no romper poetry.lock.
  • Preferir instalar dependencias dentro del contenedor: docker-compose run --rm api poetry add <paquete>
  • Para limpiar cache de Poetry: rm -rf Library/Caches/pypoetry/*