Herramientas de desarrollo

A lo largo de su vida, Python ha desarrollado un amplio ecosistema de módulos destinados a hacer las vidas de los desarrolladores de Python más fácil eliminando la necesidad de construir todo desde cero. Esa misma filosofía se ha aplicado a las herramientas que los desarrolladores utilizan para hacer su trabajo, incluso si no se usan en la versión final de un programa. Este capítulo cubre los módulos incluidos con Python para proporcionar facilidades para tareas comunes de desarrollo tales como pruebas, depuración y creación de perfiles.

La forma más básica de ayuda para un desarrollador es la documentación para el código que están usando. El módulo pydoc genera documentación de referencia formateada de las cadenas de documentación incluidas en la código fuente para cualquier módulo importable.

Python incluye dos marcos de prueba para ejercitar automáticamente código y verificar que funciona correctamente. doctest extrahe escenarios de prueba a partir de ejemplos incluidos en la documentación, ya sea dentro del código fuente o como archivos independientes. unittest es un marco de prueba automatizado con todas las funciones con soporte para artículos fijos, suites de prueba pre definidos y descubrimiento de pruebas.

El módulo trace monitorea la forma en que Python ejecuta un programa, produciendo un informe que muestra cuántas veces se ejecutó cada línea. Esa información se puede utilizar para encontrar rutas de código que no se están probando mediante un conjunto de pruebas automatizadas, y para estudiar el gráfico de llamadas de función y encontrar dependencias entre módulos.

Escribir y ejecutar pruebas descubrirá problemas en la mayoría de los programas. Python ayuda a que la depuración sea más fácil, ya que en la mayoría de los casos errores no manejados se imprimen en la consola como rastreos. Cuando un programa no se ejecuta en un entorno de consola de texto, traceback puede ser utilizado para preparar resultados similares para un archivo de registro o mensaje de diálogo. En situaciones donde un rastreo estándar no proporciona suficiente información, usa cgitb para ver detalles como variable locales de configuración en cada nivel de la pila y el contexto original. cgitb también puede formatear los rastreos en HTML, para reportar errores en aplicaciones Web.

Una vez que identificada la ubicación de un problema, seguir el código utilizando el depurador interactivo en el módulo pdb puede hacer más fácil de arreglar al mostrar qué camino a través del código se siguió para llegar a la situación de error y experimentar con cambios usando objetos y código directamente.

Después que un programa ha sido probado y depurar para que funcione correctamente, el siguiente paso es trabajar en el rendimiento. Usando profile y timeit, un desarrollador puede medir la velocidad de un programa y encontrar las partes lentas para que puedan ser aisladas y mejoradas.

Es importante sangrar el código fuente consistentemente en un idioma como Python, donde el espacio en blanco es significativo. El módulo tabnanny proporciona un escáner para informar sobre el uso ambiguo de sangría, y puede usarse en pruebas para asegurar que el código cumpla con un estándar mínimo antes de que se registre en el repositorio de origen.

Los programas de Python se ejecutan dando al intérprete un version compilada por bytes de la fuente del original programa. Las versiones compiladas por byte pueden crearse sobre la marcha, o una vez cuando el programa es empaquetado. El módulo compileall expone la interfaz utilizada por los programas de instalación y las herramientas de empaque para crear archivos que contienen el código de bytes para un módulo. Se puede usar en un entorno de desarrollo para asegurarse de que un archivo no tiene ningún error de sintaxis y para construir archivos de bytes compilados para empaquetar cuando se libera el programa.

En el nivel de código fuente, el módulo pyclbr proporciona una navegador de clases que puede ser utilizado por un editor de texto u otro programa para escanear la fuente en Python por símbolos interesantes como funciones y clases, sin importar el código y potencialmente desencadenando efectos secundarios.

Los entornos virtuales de Python, gestionados por venv, definen entornos aislados para instalar paquetes y ejecutar programas. Ellos hacenes fácil probar el mismo programa con diferentes versiones de dedependencias e instalar diferentes programas con conflictos de dependencias en la misma computadora.

Aprovechando el gran ecosistema de módulos de extensión, marcos y herramientas disponibles a través del Índice Python de Paquetes requiere un instalador de paquete. El instalador de paquetes de Python, pip, no es distribuido con el intérprete, debido al largo ciclo de publicación para el idioma en comparación con las actualizaciones deseadas para la herramienta. El módulo ensurepip se puede utilizar para instalar la última versión de pip.