Prácticas recomendadas para bibliotecas esenciales
Un resumen condensado de las 25 prácticas más importantes para elegir y usar bibliotecas esenciales de Python, extraído de cada página de esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 prácticas más importantes para elegir y usar bibliotecas esenciales de Python, extraído de cada página de esta sección.
Prefiere httpx para nuevos clientes HTTP: Reutiliza Client/AsyncClient con Timeout explícito y raise_for_status() (httpx y requests).
Nunca bloquees asyncio con HTTP síncrono: Usa httpx.AsyncClient o asyncio.to_thread, no requests dentro de rutas FastAPI asíncronas.
Valida JSON en el límite HTTP: Analiza las respuestas con modelos Pydantic antes de la lógica de negocio; la deriva del esquema causa KeyErrors profundos.
Carga la configuración con pydantic-settings: Falla rápidamente ante secretos faltantes al inicio; usa extra="ignore" para detectar errores tipográficos (pydantic-settings).
Caché de fábricas de configuración: @lru_cache en get_settings() evita reanalizar el entorno por solicitud sin globales en tiempo de importación.
Reintenta solo fallos transitorios: Estrecha retry_if_exception_type en tenacity; no reintentes errores de cliente 4xx (tenacity).
Añade jitter al backoff: wait_exponential_jitter previene tormentas de reintentos sincronizados contra sistemas ascendentes en recuperación.
Empareja reintentos con claves de idempotencia: Especialmente para pagos y escrituras; los reintentos sin deduplicación aplican efectos secundarios dos veces.
Registra before_sleep en los reintentos: before_sleep_log hace que los bucles de reintento sean visibles en las herramientas de observabilidad.
Almacena UTC en bases de datos: Convierte con zoneinfo o pendulum en los límites de visualización, no con datetimes locales ingenuos (pendulum / arrow).
Aplica la transposición EXIF antes de las miniaturas: Las fotos del teléfono aparecen de lado sin ImageOps.exif_transpose (Pillow).
Limita los bytes antes de decodificar imágenes: Rechaza cargas superiores a un límite de tamaño para mitigar bombas de descompresión.
Lista blanca de formatos de imagen después de abrir: Confía en img.format de Pillow, no solo en el Content-Type del cliente.
Usa BytesIO en memoria para exportaciones de API: Los pipelines de openpyxl y reportlab no deberían requerir archivos temporales en disco (openpyxl / python-docx / reportlab).
Mantén las plantillas de informes en control de versiones: Los diseños de Word y PDF mantenidos como plantillas superan a las coordenadas codificadas.
Separa la obtención del análisis en los scrapers: Prueba los analizadores de BeautifulSoup contra fixtures HTML sin red (beautifulsoup4 & lxml).
Prefiere las API a la extracción de datos: Respeta robots.txt, límites de tasa y términos de servicio cuando el HTML sea la única fuente.
Usa el backend del analizador lxml para HTML grande: Más rápido y con menor uso de memoria que los analizadores puramente de Python a escala.
Las tareas de Celery pasan IDs, no objetos ORM: Serializa en JSON solo cargas primitivas (celery).
Configura serializadores JSON en Celery: Evita pickle; la deserialización arbitraria es un riesgo de seguridad.
Establece acks_late y prefetch bajo: Recuperación justa cuando los workers mueren a mitad de tarea sin perder mensajes del broker.
Usa Alembic para cambios de esquema: create_all es solo para desarrollo; producción necesita historial de migraciones (SQLModel / SQLAlchemy).
Estilo select() de SQLAlchemy 2.0: session.exec(select(Model)), no el legado session.query.
Salida humana enriquecida en stderr: Mantén stdout legible por máquinas cuando las CLIs canalizan datos (Rich & Textual).
Fija y audita dependencias: Bloquea versiones en pyproject.toml/uv.lock; revisa licencias transitivas y CVEs trimestralmente.
Estandariza en httpx por servicio; múltiples pilas de clientes multiplican las políticas de tiempo de espera y reintento.
Cuando las API fuerzan cadenas ISO 8601 UTC; usa datetime + zoneinfo y omite dependencias adicionales.
No; las BackgroundTasks de FastAPI y las colas en proceso manejan trabajo de menos de un segundo; Celery cuando necesites workers horizontales.
Haz coincidir el límite del framework web: SQLModel con FastAPI; Django ORM dentro de las aplicaciones Django.
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026