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.
-
Prefiere
httpxpara nuevos clientes HTTP: ReutilizaClient/AsyncClientconTimeoutexplícito yraise_for_status()(httpx y requests). -
Nunca bloquees
asynciocon HTTP síncrono: Usahttpx.AsyncClientoasyncio.to_thread, norequestsdentro 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; usaextra="ignore"para detectar errores tipográficos (pydantic-settings). -
Caché de fábricas de configuración:
@lru_cacheenget_settings()evita reanalizar el entorno por solicitud sin globales en tiempo de importación. -
Reintenta solo fallos transitorios: Estrecha
retry_if_exception_typeentenacity; no reintentes errores de cliente 4xx (tenacity). -
Añade jitter al backoff:
wait_exponential_jitterpreviene 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_sleepen los reintentos:before_sleep_loghace que los bucles de reintento sean visibles en las herramientas de observabilidad. -
Almacena UTC en bases de datos: Convierte con
zoneinfoopendulumen los límites de visualización, no condatetimes 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.formatde Pillow, no solo en elContent-Typedel cliente. -
Usa
BytesIOen memoria para exportaciones de API: Los pipelines deopenpyxlyreportlabno 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
lxmlpara 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_lateyprefetchbajo: Recuperación justa cuando los workers mueren a mitad de tarea sin perder mensajes del broker. -
Usa Alembic para cambios de esquema:
create_alles solo para desarrollo; producción necesita historial de migraciones (SQLModel / SQLAlchemy). -
Estilo
select()de SQLAlchemy 2.0:session.exec(select(Model)), no el legadosession.query. -
Salida humana enriquecida en
stderr: Manténstdoutlegible 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.
Preguntas frecuentes
¿Cuántas bibliotecas HTTP debe usar un servicio?
Estandariza en httpx por servicio; múltiples pilas de clientes multiplican las políticas de tiempo de espera y reintento.
¿Cuándo es suficiente la biblioteca estándar sin pendulum?
Cuando las API fuerzan cadenas ISO 8601 UTC; usa datetime + zoneinfo y omite dependencias adicionales.
¿Celery para cada trabajo en segundo plano?
No; las BackgroundTasks de FastAPI y las colas en proceso manejan trabajo de menos de un segundo; Celery cuando necesites workers horizontales.
¿Cómo elijo entre SQLModel y Django ORM?
Haz coincidir el límite del framework web: SQLModel con FastAPI; Django ORM dentro de las aplicaciones Django.
Relacionado
- Conceptos básicos de entornos y empaquetado - gestión de dependencias
- Seguridad de dependencias y cadena de suministro - auditoría de dependencias
- Conceptos básicos de FastAPI - integración del framework
- Conceptos básicos de bases de datos - profundidad de la capa de datos
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+.