La mayoría de las dependencias chicas en un proyecto de Python reemplazan algo que ya viene instalado. Seis módulos cubren la mayor parte, y cada uno es un solo import, sin versión que fijar y sin nada que se rompa el día que alguien deje de mantenerlo.
argparse convierte un script en un comando. ap.add_argument("--limite", type=int, default=50) y un valor inválido termina la corrida con invalid int value: 'muchos' después de imprimir la línea de uso, antes de que el resto del código corra. action="store_true" da una bandera --simulacro, y parsear ["inscritos", "--simulacro"] responde Namespace(carpeta='inscritos', simulacro=True, limite=50). Note el guion bajo: un guion en la bandera se vuelve guion bajo en el atributo.
zoneinfo maneja la parte del tiempo que no es aritmética. Camila coordina una llamada de trabajo remoto entre Bogotá y un cliente en Bangalore: ZoneInfo("Asia/Kolkata") en una mañana de septiembre da 2026-09-22T19:00:00+05:30, y convertir a UTC da 2026-09-22T13:30:00+00:00. La media hora de diferencia es la razón para usar una base de zonas horarias real y nunca un número entero de horas, y está en la biblioteca estándar desde Python 3.9.
Tres que reemplazan un ciclo que ya iba a escribir
itertools.groupby colapsa un ciclo de agrupación, con una condición que atrapa a todo el mundo una vez: agrupa solo corridas ya adyacentes, así que las filas tienen que venir ordenadas por esa misma llave primero. Sobre filas de inscritos ya ordenadas por turno, entrega mañana con ['Camila', 'Esteban'] y luego tarde. Sin ordenar antes, produce la misma llave dos veces.
itertools.pairwise da pares consecutivos: [(1, 4), (4, 9), (9, 16)] a partir de cuatro lecturas, que es cada ciclo de diferencia-entre-valores-consecutivos jamás escrito, en una sola llamada, desde Python 3.10. itertools.batched parte una secuencia en lotes: [('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)], y el último lote corto es el caso que un armador hecho a mano suele arruinar.
Uno que es una decisión de seguridad y no una comodidad
secrets es el que conviene conocer por nombre. secrets.token_urlsafe(16) devuelve una cadena de 22 caracteres segura para poner en una URL, tomada de la fuente criptográfica del sistema operativo. El módulo random no es eso: es rápido, reproducible y predecible a partir de su salida, lo cual es exactamente correcto para barajar una lista y exactamente incorrecto para un enlace de recuperación de contraseña. Usar random donde corresponde secrets es una vulnerabilidad real que ninguna prueba detecta, y es la razón por la que los dos módulos existen por separado.
textwrap y shutil llenan los espacios alrededor. textwrap.shorten(texto, width=24, placeholder=" ...") da una carpeta muy larga ..., cortando en un límite de palabra y no a la mitad, y shutil.disk_usage("/").free responde en bytes, que es la comprobación que un script que escribe archivos debería hacer antes de empezar y no después de fallar.
Qué revisar en 2026
El índice de módulos de la documentación estándar es la herramienta, gratis, y el hábito que vale la pena formar es abrirlo antes de agregar una dependencia y no después. Reemplaza buscar primero un paquete, que confiablemente encuentra uno, porque alguien ya publicó un paquete para cada cosa de esta lista.
Python 3.14 es lo que estas versiones asumen, gratis y de código abierto. Tres de los seis módulos de arriba ganaron la función específica nombrada aquí después de 2020, así que una base de código fijada a un intérprete viejo tiene menos de esto de lo que esta página sugiere, y revisar la nota de versión en la documentación es un hábito de diez segundos que evita un error de importación confuso.
Por dónde se pierde la gente aquí
El tropiezo es no saber qué buscar, y ninguna cantidad de lectura arregla eso directamente. Nadie busca pairwise sin conocer la palabra, y el ciclo que calcula diferencias entre lecturas consecutivas se escribe a mano cientos de veces porque es lo bastante fácil de escribir.
Lo que sí funciona es leer el índice de un módulo cada vez que se escribe un ciclo que se siente genérico. Un ciclo que agrupa, parte en lotes, empareja, cuenta o aplana es una de ocho funciones entre itertools y collections, y quince minutos con esos dos índices es la lectura de mayor rendimiento en este lenguaje.
Los modismos que estas funciones reemplazan están cubiertos en Python desde cero, y lo que hacer cuando la respuesta de verdad es una dependencia externa está en paquetes y entornos. El mismo módulo argparse vuelve a aparecer en automatización con scripts, esta vez agendado.