Cuando se enfrentan proyectos Python complejos, especialmente en el ámbito del aprendizaje profundo, los tiempos de carga de datos y modelos pueden ser considerablemente largos. En estas situaciones, la depuración tradicional mediante la inserción de sentencias print se vuelve ineficaz. Una alternativa potente es la depuración dinámica, y para los desarrolladores que utilizan Visual Studio Code (VS Code), la biblioteca debugpy ofrece una solución eficiente para este propósito.
Instalación de la Biblioteca debugpy
El primer paso consiste en instalar debugpy en su entorno Python. Se recomienda utilizar la versión más reciente para aprovechar las últimas mejoras y correcciones, aunque es importante estar atento a posibles conflictos de compatibilidad con otras bibliotecas presentes en su entorno (por ejemplo, con la biblioteca typing).
pip install debugpy -U
Si durante la instalación o el uso encuentra problemas de compatibilidad, es posible que necesite instalar una versión específica que se adapte mejor a su configuración existente:
pip install debugpy==1.5.1
Configuración de Visual Studio Code para la Depuración
Para permitir que VS Code se conecte a su proceso Python, es necesario configurar un perfil de depuración. Abra la vista "Ejecutar y Depurar" (Run and Debug) en VS Code y cree un archivo launch.json si aún no existe. Dentro de este archivo, añada una configuración de tipo "attach" (adjuntar) como la siguiente:
{
"version": "0.2.0",
"configurations": [
{
"name": "Adjuntar a Proceso Python (debugpy)",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"justMyCode": false
}
]
}
La opción "justMyCode": false es fundamental si su intención es establecer puntos de interrupción dentro del código de bibliotecas de terceros o paquetes instalados en su entorno. Por defecto, VS Code solo depura el código de su proyecto, ignorando el código de las dependencias.
Integración de debugpy en el Código Python
A continuación, incorpore las siguientes líneas al principio de su script Python, o en el punto donde desee que el programa espere la conexión del depurador:
import debugpy
import sys
try:
# El puerto 5678 es una opción común. Asegúrese de que coincida con la configuración de VS Code.
# Si no se especifica un host, debugpy usará 127.0.0.1 por defecto.
DEBUG_PORT = 5678
print(f"[*] debugpy: Configurando oyente en localhost:{DEBUG_PORT}...", file=sys.stderr)
debugpy.listen(("localhost", DEBUG_PORT))
print(f"[*] debugpy: Esperando conexión del depurador en el puerto {DEBUG_PORT}...", file=sys.stderr)
debugpy.wait_for_client()
print("[*] debugpy: Depurador conectado. Continuar ejecución.", file=sys.stderr)
except Exception as e:
print(f"[!] debugpy: Fallo al iniciar el servidor de depuración: {e}", file=sys.stderr)
# Considerar si el programa debe continuar sin depuración o terminar aquí.
pass
# ... el resto de su código Python para el proyecto de aprendizaje profundo
Cuando ejecute su script Python, este se detendrá en debugpy.wait_for_client(), mostrando un mensaje que indica que está esperando una conexión. Es en este momento cuando puede establecer los puntos de interrupción necesarios en su código.
Proceso de Depuración
Con su script Python ejecutándose y a la espera de una conexión, vuelva a VS Code. En la vista "Ejecutar y Depurar", seleccione la configuración que creó (por ejemplo, "Adjuntar a Proceso Python (debugpy)") y haga clic en el botón de inicio de depuración (el icono triangular verde). VS Code establecerá la conexión con el proceso Python en ejecución, permitiéndole inspeccionar variables, avanzar paso a paso por el código y utilizar la consola interactiva del depurador.
Funcionalidades Avanzadas de Depuración
-
Consola Interactiva: Durante una sesión de depuración activa, la consola de depuración de VS Code es una herramienta extremadamente valiosa. Permite ejecutar cualquier sentencia Python arbitraria en el contexto actual del programa. Esto facilita la inspección de variables, la modificación de valores en tiempo real o la prueba de expresiones complejas sin tener que reiniciar la ejecución.
-
Depuración Remota Mediante SSH: Si su proyecto se está ejecutando en un servidor remoto, puede utilizar el reenvío de puertos SSH para conectar su VS Code local al proceso de
debugpyque corre en el servidor. Primero, establezca una conexión SSH con un túnel de reenvío de puertos. El siguiente comando redirige el puerto local 5678 al puerto 5678 dellocalhosten el servidor remoto:ssh -L 5678:localhost:5678 usuario@servidor_remotoUna vez que el túnel SSH esté activo, ejecute su script Python con la configuración de
debugpy.listenen el servidor remoto. Finalmente, desde su instancia local de VS Code, inicie la depuración con la configuración "Adjuntar a Proceso Python (debugpy)". VS Code se conectará al puerto local 5678, y el túnel SSH se encargará de reenviar la comunicación al procesodebugpyen el servidor.