# Introducción

La «biblioteca Python» contiene varios tipos de componentes diferentes.

Contiene tipos de datos que normalmente se considerarían parte del «núcleo» de un lenguaje, como números y listas. Para estos tipos, el núcleo del lenguaje Python define la forma de los literales y coloca algunas restricciones a su semántica, pero no define completamente la semántica. (Por otro lado, el núcleo del lenguaje sí define propiedades sintácticas como la ortografía y las prioridades de los operadores.)

La biblioteca también contiene funciones y excepciones incorporadas — objetos que pueden ser utilizados por todo código Python sin la necesidad de una declaración `import`. Algunas de ellos están definidas por el núcleo del lenguaje, pero muchos no son esenciales para la semántica del núcleo y sólo se describen aquí.

La mayor parte de la biblioteca, sin embargo, consiste en una colección de módulos. Hay muchas maneras de diseccionar esta colección. Algunos módulos están escritos en C y fueron incorporados en el intérprete de Python; otros están escritos en Python y se importan en código fuente. Algunos módulos proporcionan interfaces muy específicas de Python, como la impresión de un stack trace; otros proporcionan interfaces que son específicas para determinados sistemas operativos, como el acceso a hardware específico; otros proveen interfaces específicas para un dominio de aplicación concreto, como la World Wide Web. Algunos módulos están disponibles en todas las versiones y plataformas de Python; otros sólo están disponibles cuando el sistema subyacente los soporta o los requiere; otros solo están disponibles cuando se ha elegido una opción de configuración particular en el momento en que compiló e instaló Python.

Este manual está organizado «desde adentro hacia afuera:» primero describe las funciones integradas, los tipos de datos y las excepciones, y finalmente describe los módulos, agrupados en capítulos de módulos relacionados.

Esto significa que si comienza a leer este manual desde el principio, y salta al siguiente capítulo cuando se aburra, obtendrá una visión general razonable de los módulos y áreas de aplicación disponibles que son soportados por la biblioteca de Python. Por supuesto, no tienes que leerlo necesariamente como una novela — sino que también puedes navegar por la tabla de contenidos (al principio del manual), o buscar una función, módulo o término específico en el glosario (en la parte final del manual). Y por último, si disfruta aprender sobre diferentes temas de manera aleatoria, puede escoger un número de página al azar (ver módulo `random`) y leer una o dos secciones. Independientemente del orden en que lea las secciones de este manual, es útil comenzar con el capítulo Funciones incorporadas, ya que el resto del manual asume la familiaridad con este material.

¡Que comience el espectáculo!

## Notas sobre la disponibilidad

- Una nota de «Disponibilidad: Unix» significa que esta función se encuentra comúnmente en los sistemas Unix. Pero no hace ninguna afirmación sobre su existencia en un sistema operativo específico.

- Si no se indica por separado, todas las funciones que afirman «Disponibilidad: Unix» son compatibles con macOS, que se basa en un núcleo de Unix.

- Si una nota de disponibilidad contiene tanto una versión mínima del Kernel como una versión mínima de libc, entonces ambas condiciones deben cumplirse. Por ejemplo, una característica con la nota Availability: Linux >= 3.17 with glibc >= 2.27 requiere tanto Linux 3.17 o posterior como glibc 2.27 o posterior.

### Plataformas WebAssembly

Las plataformas WebAssembly `wasm32-emscripten` (Emscripten) y `wasm32-wasi` (WASI) proporcionan un subconjunto de APIs POSIX. Los tiempos de ejecución de WebAssembly y los navegadores están aislados y tienen acceso limitado al host y a los recursos externos. Cualquier módulo de la biblioteca estándar de Python que utilice procesos, hilos, redes, señales u otras formas de comunicación entre procesos (IPC), no está disponible o puede no funcionar como en otros sistemas tipo Unix. La E/S de archivos, el sistema de archivos y las funciones relacionadas con permisos Unix también están restringidas. Emscripten no permite el bloqueo de E/S. Otras operaciones bloqueantes como `sleep()` bloquean el bucle de eventos del navegador.

Las propiedades y el comportamiento de Python en plataformas WebAssembly dependen de la versión del SDK Emscripten o del SDK WASI, de los tiempos de ejecución WASM (navegador, NodeJS, wasmtime) y de los indicadores de tiempo de compilación de Python. WebAssembly, Emscripten, y WASI son estándares en evolución; algunas características como las redes pueden ser soportadas en el futuro.

Para Python en el navegador, los usuarios deberían considerar Pyodide o PyScript. PyScript está construido sobre Pyodide, que a su vez está construido sobre CPython y Emscripten. Pyodide proporciona acceso a las APIs JavaScript y DOM de los navegadores, así como capacidades de red limitadas con las APIs `XMLHttpRequest` y `Fetch` de JavaScript.

- Las APIs relacionadas con procesos no están disponibles o siempre fallan con un error. Esto incluye APIs que generan nuevos procesos (`fork()`, `execve()`), esperan procesos (`waitpid()`), envían señales (`kill()`), o interactúan con procesos. El `subprocess` se puede importar pero no funciona.

- El módulo `socket` está disponible, pero es limitado y se comporta de forma diferente a otras plataformas. En Emscripten, los sockets son siempre no bloqueantes y requieren código JavaScript adicional y auxiliares en el servidor para proxy TCP a través de WebSockets; ver Emscripten Networking para más información. Vista previa de instantánea WASI 1 permite sólo sockets desde un descriptor de fichero existente.

- Algunas funciones son stubs que no hacen nada y siempre devuelven valores codificados.

- Las funciones relacionadas con descriptores de archivos, permisos de archivos, propiedad de archivos y enlaces son limitadas y no admiten algunas operaciones. Por ejemplo, WASI no permite enlaces simbólicos con nombres de archivo absolutos.