Faragiri

Aprender Python Lenguajes de programación · Python desde cero, La biblioteca estándar, Paquetes y entornos

Diez líneas de biblioteca estándar que suman las ventas de un tianguis, y después la segunda semana, que no trata de Python en ningún momento.

3Ramas
3Nodos debajo
3Profundidad

Ya instalado

Los cuatro módulos de que está hecho el script de Ernesto

Son una sola superficie y no cuatro bibliotecas: se reparten juntas, se versionan juntas, y están escritas para entregarse cosas entre ellas.

La biblioteca estándar
  • pathlibUna ruta que sabe abrirse, juntarse, buscarse y revisarse
  • csvDictReader, con las llaves del encabezado
  • collectionsdefaultdict, para que una llave ausente no sea un resguardo
  • statisticsmediana, promedio, y el float honesto cuando hay dos valores
  • jsonLas mismas filas, de salida hacia otra cosa
  • sqlite3Una base de datos de verdad, adentro del intérprete y sin servidor
  • pathlibUna ruta que sabe abrirse, juntarse, buscarse y revisarse
  • csvDictReader, con las llaves del encabezado
  • collectionsdefaultdict, para que una llave ausente no sea un resguardo
  • statisticsmediana, promedio, y el float honesto cuando hay dos valores
  • jsonLas mismas filas, de salida hacia otra cosa
  • sqlite3Una base de datos de verdad, adentro del intérprete y sin servidor

Seis de unos doscientos. La figura no dice cuáles son buenos, solamente que salir a buscar cualquiera de ellos afuera empieza un segundo problema.

Ernesto lleva en una hoja de cálculo las ventas que declara cada puesto de un tianguis en Xalapa y quiere el total por puesto. Diez líneas, nada instalado, e imprime:

  • A12: 4310 pesos en 3 ventas, mediana 1420
  • B07: 1940 pesos en 2 ventas, mediana 970.0

Todo son cuatro importaciones y un ciclo. csv.DictReader entrega un diccionario por fila, con las llaves de la línea de encabezado, así que r["monto"] sirve sin ponerse a contar columnas. Path("ventas.csv").open() reemplaza open() con una ruta armada a mano, y es la que conviene aprender porque el mismo objeto junta rutas, busca por patrón y revisa si algo existe. defaultdict(list) agrega a una llave que todavía no existe, lo cual quita el resguardo de dos líneas que todo el mundo escribe primero. Y f"{puesto}: {sum(montos)} pesos" evalúa lo que va adentro de las llaves, aritmética incluida.

Una línea hace trabajo callado: if r["monto"] se salta la cadena vacía que deja una venta sin capturar, porque una celda en blanco llega del CSV como "" y nunca como None. Si se omite, int("") detiene el programa, que es el primer golpe más común en un script así.

La salida trae un detalle que conviene notar. statistics.median de dos valores devuelve su promedio, así que el tipo se vuelve float, y por eso el puesto B07 imprime 970.0 y el A12 imprime 1420. Nada está mal; la función está avisando con cuántas lecturas contó.

La biblioteca es el lenguaje, en la práctica

Nada de lo de arriba vino de un paquete. csv, pathlib, statistics y collections vienen con el intérprete, se versionan con él, y están escritas para usarse juntas, que es lo que vuelve segunda jugada y no primera el ir a buscar una dependencia. Fechas, JSON, peticiones HTTP, archivos comprimidos, SQLite y un corredor de pruebas están ahí adentro en los mismos términos. Saber qué ya está presente es la diferencia entre un script de diez líneas y un proyecto con archivo de dependencias, y eso es la biblioteca estándar.

La sintaxis de abajo es de verdad chica: la sangría carga los bloques, no hay llaves ni punto y coma, y quien empieza lee una página antes de que le enseñen nada. Esa legibilidad es la razón de que sea el que se reparte primero, y se cubre en Python desde cero. Es también la razón de que se subestime lo que falta.

Lo que falta es el entorno, y ahí se va la quincena

El script de Ernesto corre. El script de Ernesto corre en la computadora de Ernesto. El hueco entre esas dos frases es la segunda semana, y nada de eso es Python.

python3 -m venv .venv le da al proyecto su propio intérprete y sus propios paquetes, que es el movimiento que evita que la actualización de un proyecto rompa otro. Sin eso toda instalación es global y todos los proyectos pelean por las mismas versiones. Un archivo de bloqueo anota las versiones exactas, y va adentro del repositorio, porque una lista de nombres sin versiones reproduce lo más nuevo del día en que alguien lo clone y no lo que uno tenía.

Una línea más pertenece a cualquier archivo que pudiera importarse: if __name__ == "__main__" protege el código que no debe correr al importar. Un archivo sin eso hace su trabajo cuando algo lo importa, y la falla desconcierta, porque quien importa puede ser el corredor de pruebas o un proceso arrancando un trabajador. Entornos, instalaciones y las herramientas de alrededor son los paquetes y entornos.

La documentación está en español y el mensaje de error no

Este es el escalón de esta orilla y casi nadie lo nombra. La documentación oficial de Python está traducida al español y se mantiene en el mismo repositorio que la original: docs.python.org/es/3/, sobre la versión 3.14.7 al 14 de septiembre de 2026. La traducción es parcial, así que varias páginas de referencia siguen llegando en inglés, y conviene saberlo antes de concluir que uno no encontró la página.

Lo que no está traducido, y no va a estarlo, es lo que el intérprete imprime. ValueError: invalid literal for int() with base 10: '' llega así en Xalapa y en Bogotá, y también llega así la respuesta del asistente del editor la mitad de las veces. La jugada que sirve es deliberada: leer la explicación de un concepto en español, y aprender de memoria los diez o quince mensajes de error que se repiten, en inglés, sin traducirlos por dentro. El vocabulario grande va en español; los quince renglones que se repiten cada semana van en el idioma en que aparecen.

La segunda semana

Lo que tiene que aguantar para que el script corra en otra máquina

Cada eslabón carga toda la carga, y el que se rompe nunca es el que alguien estudió.

El eslabón abierto es donde de verdad falla el proyecto de quien empieza, y es el único que no cuesta nada arreglar antes de que falle.

Qué abrir en 2026

Python 3.14 es la versión vigente. uv, de 2024, es la herramienta que conviene instalar primero: es gratis y de código abierto y reemplazó a pip, a virtualenv y a pyenv, tres herramientas que se repartían un solo trabajo. Instala la versión del intérprete que el proyecto pida y escribe el archivo de bloqueo, que es el párrafo de arriba resuelto en vez de explicado.

Ruff es el formateador y revisor, también gratis, de los mismos autores, y reemplazó a flake8, a isort y a black. Los dos son un solo binario y ninguno necesita un Python propio para correr, que era el problema circular que volvía dolorosas de explicar a las viejas.

Ninguna de las tres cobra, y todas se bajan una vez. Lo que sí cuesta aquí es la bajada misma: uv trae el intérprete completo, y en una conexión de barrio conviene hacerlo una vez y no una vez por proyecto, que es justamente lo que uv hace con su caché compartido.

El error: buscar un paquete antes de abrir la biblioteca

Donde la gente se atora con este lenguaje no es la sintaxis, ni es exactamente el entorno. Es que los problemas de entorno casi siempre llegan como consecuencia de una dependencia, y la dependencia casi nunca hacía falta. Un script que lee una hoja de cálculo, suma números e imprime un resumen son diez líneas de biblioteca estándar; la versión que arranca con una biblioteca de marcos de datos arrastra una dependencia compilada, una restricción de versión y una razón para preocuparse por cuál intérprete está en la ruta.

La regla que no cuesta nada: antes de instalar algo, buscarlo una vez en la biblioteca estándar. La respuesta es que no con la frecuencia suficiente para que la costumbre sea honesta, y que sí con la frecuencia suficiente para ahorrarse la quincena. El primer intento de Ernesto empezó con un paquete de hojas de cálculo y una instalación que falló en un equipo de 2018, y las diez líneas de arriba son lo que quedó del segundo intento.

La pregunta abierta es para qué sirve Python una vez que el script le tiene que responder a alguien más, y se parte en dos: la misma biblioteca estándar apuntada a los trabajos aburridos, en la automatización con scripts, o una petición que llega de afuera, en Python en la web. En cuál lenguaje gastar la quincena se decide en el primer lenguaje, y el intérprete que corre todo esto es cómo corre el código.

Dentro de esto, 3

Arriba de esto