Buenas Prácticas de la Biblioteca Estándar
Utiliza los módulos "con baterías incluidas" antes que los de PyPI, y ten en cuenta cuándo la biblioteca estándar no es suficiente.
Cómo Usar Esta Lista
- Comprueba la biblioteca estándar durante la revisión del diseño antes de añadir dependencias.
- Documenta las "escape hatches" (soluciones alternativas) cuando se elija PyPI (httpx, pydantic, argon2).
- Fija las características de la versión de Python en el manifiesto (3.14) en la documentación del equipo.
A - Selección
- Prueba
pathlib+json+loggingantes que los micro-paquetes. La mayoría de los scripts no necesitan más. - Añade PyPI cuando la biblioteca estándar carezca de características o ergonomía a tu escala. HTTP/2, validación, hashing de contraseñas.
- Prefiere
tomllibpara TOML en 3.11+. Alineado con el ecosistemapyproject.tomlyuv0.6+. - Usa
zoneinfo+datetimeUTC conscientes. Instalatzdataen despliegues de Windows. -
argparsees suficiente para CLIs internas;typercuando la experiencia de usuario importa. Los scripts sin dependencias se quedan conargparse.
B - Seguridad
-
subprocesscon argumentos de lista,shell=Falsepor defecto. Audita cualquiershell=Truecon entrada del usuario. -
secretspara tokens; nunca el módulorandom. Los enlaces de sesión y restablecimiento usan CSPRNG. - Nunca uses
sha256solo para contraseñas. Usaargon2/bcrypta través de bibliotecas establecidas. -
json.loadsentrada no confiable con límites de tamaño. Evita DoS por cargas útiles gigantes. - Patrones
rerevisados para backtracking catastrófico. Establece un tiempo límite o simplifica el patrón.
C - Archivos y Tiempo
- Objetos
Pathy codificaciónutf-8explícita en E/S de texto. No concatenes rutas de cadenas. - Almacena en UTC; convierte con
zoneinfopara mostrar. Rechazadatetimeingenuos en el dominio. -
hashlib.file_digesto actualización por fragmentos para archivos grandes. No leas varios GB en RAM. - Precedencia de configuración: CLI > env > archivo > valores por defecto. Documenta el orden en
README. - No incluyas secretos en
INIengit. Inyección de entorno para claves.
D - Ergonomía
-
dataclass+StrEnumpara DTOs internos;Pydanticen el borde de la API. Límite de validación claro. -
contextmanagerpara ámbitos pequeños;ExitStackpara muchos. Limpieza garantizada. - Cadenas perezosas de
itertoolspara iterables grandes. Usaislice/batcheden lugar de materializar listas. -
functools.lru_cachesolo en funciones puras hasheables. Sin caché ilimitada en argumentos ilimitados. - Compila
regexen la importación para rutas críticas. Usa grupos nombrados para mantenibilidad.
E - Operaciones
- Configura
loggingen elmain, no en las bibliotecas. Las bibliotecas usangetLogger(__name__). - Tiempos de espera de
subprocessen todas las llamadas a servicios. Evita procesos hijos colgados. -
uuid4para IDs opacos; considerauuid7para localidad de base de datos en 3.14+. Alinea con el tipo de almacenamiento. -
compare_digestpara comparaciones de secretos. Comprobaciones seguras contra ataques de temporización. - Reevalúa la biblioteca estándar en cada actualización de Python. Las nuevas baterías (tomllib, batched, uuid7) pueden eliminar dependencias.
Preguntas Frecuentes
¿Cuándo es obligatorio PyPI?
Clientes HTTP de producción, hashing de contraseñas, drivers de base de datos asíncronos, validación de esquemas a escala.
¿Es la biblioteca estándar más lenta?
A menudo competitiva (hashlib, json); haz un perfilado antes de cambiar a orjson etc.
¿Cómo resistir la hinchazón de dependencias?
ADR (Registro de Decisiones de Arquitectura) por cada nueva dependencia: problema, alternativa de biblioteca estándar rechazada, propietario, criterios de eliminación.
¿`tzdata` en Windows?
Añade el paquete tzdata a los requisitos cuando uses zoneinfo.
¿`urllib` vs `httpx`?
urllib está bien para scripts estrictamente controlados; los servicios usan httpx con tiempos de espera y pooling.
¿`configparser` vs `env`?
Archivos para valores por defecto; secretos y anulaciones por entorno en variables de entorno.
¿Precaución con `pickle` de la biblioteca estándar?
Nunca des-serialices bytes no confiables; usa json o esquemas explícitos en su lugar.
¿`more-itertools`?
Excelentes recetas, pero comprueba primero itertools.batched de 3.12+ y la biblioteca estándar.
¿Probar código de la biblioteca estándar?
Fixture tmp_path, mocks de subprocess, datetime fijos - pruebas unitarias deterministas.
¿`uv` y la biblioteca estándar?
uv gestiona las dependencias; la biblioteca estándar viene con la versión de Python fijada - documenta ambas en el pie de página de la pila.
Relacionado
- Visión General de la Biblioteca Estándar - mapa de módulos
- pathlib y os - sistema de archivos
- hashlib, secrets y uuid - higiene criptográfica
- Buenas Prácticas de Errores y Logging - política de logging
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+.