Fuera de la biblioteca estándar

Aunque la biblioteca estándar de Python es extensa, también hay un ecosistema robusto de módulos proporcionados por desarrolladores terceros y disponible del Índice de Paquetes Python. Este apéndice describe algunos de estos módulos, y las situaciones en las que es posible que desees utilizarlos para complementar o incluso reemplazar la biblioteca estándar.

Texto

El módulo string incluye una herramienta de plantilla muy básica. Muchos marcos Web incluyen herramientas de plantilla más potentes, pero Jinja2 y Mako son alternativas independientes populares. Ambos admiten bucles y estructuras de control condicional, así como otras características para combinar datos con una plantilla para producir texto de salida.

El módulo re incluye funciones para buscar y analizar texto usando patrones formalmente descritos, llamados expresiones regulares. Sin embargo, no es la única forma de analizar texto.

El paquete PLY admite la construcción de analizadores en el estilo de las herramientas GNU lexx y yacc, comúnmente usadas para construir compiladores de lenguaje. Porproporcionando entradas que describen los tokens válidos, una gramática y acciones para tomar cuando se encuentran cada uno, es posible construir compiladores completos e intérpretes funcionales, así como analizadores de datos más sencillos.

PyParsing es otra herramienta para construir analizadores. Las entradas son instancias de clases que se pueden unir entre sí utilizando operadores e invocaciones de métodos llama para construir una gramática.

Finalmente, NLTK es un paquete para procesar texto en lenguaje natural – idiomas humanos en lugar de lenguajes de computadora. Es compatible con el análisis de oraciones en partes de un discurso, encontrando la forma raíz de las palabras, y procesamiento semántico básico

Algoritmos

El módulo functools incluye algunas herramientas para crear decoradores, funciones que envuelven otras funciones para cambiar la forma en que se comportan. El paquete wrapt va más allá de functools.wrap() al asegurarse de que un decorador se construya correctamente y funcione para todos los casos extremos.

Fechas y horas

Los módulos time y datetime proporcionan funciones y clases para manipular valores de fecha y hora. Ambos incluyen funciones para analizar cadenas para convertirlas en representaciones internas. El paquete dateutil incluye un analizador más flexible que hace más fácil construir aplicaciones robustas que son más indulgentes con los diferentes formatos de entrada.

El módulo datetime incluye una clase consciente de la zona horaria representando un tiempo específico en un día específico. Sin embargo, no incluye una base de datos de zona horaria completa. El paquete pytz proporciona una tal base de datos. Se distribuye por separado de la biblioteca estándar porque es mantenido por otros autores y se actualiza con frecuencia cuando los valores de la zona horaria y del horario de verano son cambiados por instituciones políticas que los controlan.

Matemáticas

El módulo math contiene implementaciones rápidas de funciones matemáticas avanzadas. NumPy amplía el conjunto de funciones admitidas para incluir funciones de álgebra lineal y la transformación de Fourier. También incluye una implementación rápida de matriz multidimensional, mejorando la versión en array.

Persistencia e intercambio de datos

Los ejemplos en la sección sqlite3 ejecutan sentencias SQL directamente y trabajan con estructuras de datos de bajo nivel. Para aplicaciones grandes, es a menudo deseable mapear clases a tablas en la base de datos usando un mapeador relacional de objetos u ORM. La biblioteca ORM sqlalchemy proporciona interfaces para asociar clases con tablas, generar consultas, y conectar a diferentes tipos de base de datos relacionales de grado de producción.

El paquete lxml envuelve las bibliotecas libxml2 y libxslt para crear una alternativa al analizador XML en xml.etree.ElementTree. Desarrolladores familiarizados con el uso de esas bibliotecas de otros idiomas pueden encontrar lxml más fácil de adoptar en Python.

El paquete defusedxml contiene correcciones para «Billion Laughs» y otras vulnerabilidades de denegación de servicio de expansión de entidad en Bibliotecas XML de Python y hace que trabajar con XML no confiable sea más seguro que usar solamente la biblioteca estándar.

Criptografía

El equipo que está creando el paquete cryptography dice «Nuestro objetivo es ser tu “biblioteca estándar criptográfica”». El paquete de criptografía expone interfaces de alto nivel para facilitar la incorporación de funciones criptográficas a las aplicaciones y el paquete se mantiene activamente con lanzamientos frecuentes para abordar vulnerabilidades en las bibliotecas subyacentes tales como OpenSSL.

Concurrencia con Procesos, Hilos y Corutinas

El bucle de evento integrado en asyncio es una implementación de referencia basada en la interfaz abstracta definida por el módulo. Es posible reemplaz el bucle de evento con una biblioteca como uvloop, que da un mejor rendimiento a cambio de agregar dependencias de aplicación adicionales.

El paquete curio es otro paquete de concurrencia similar a asyncio pero con una interfaz más pequeña que trata todo como una corutina y no admite devoluciones de llamadas en la forma en que asyncio lo hace.

La biblioteca Twisted proporciona un marco extensible para programación en Python con un enfoque especial en la programación de redes basadas en eventos e integración multiprotocolo. Es madura, robusta y está bien documentada.

El Internet

El paquete requests es un reemplazo muy popular para urllib.request. Proporciona una interfaz consistente para trabajar con recursos remotos direccionables a través de HTTP, incluye soporte robusto de SSL, y puede usar agrupación de conexiones para un mejor rendimiento en aplicaciones multihilo. También proporciona funciones que lo hacen muy adecuado para acceder a las interfaces REST, como el análisis integrado JSON.

El módulo html de Python incluye un analizador básico para datos HTML bien formados. Sin embargo, los datos del mundo real rara vez están bien estructurados, lo que hace problemático analizarlos. Las bibliotecas BeautifulSoup y PyQuery son alternativas a html que son más robustas frente a datos desordenados. Ambos definen interfaces para analizar, modificar y construir HTML.

El paquete incorporado http.server incluye clases base para crear servidores HTTP simples desde cero. No ofrece mucho soporte más allá de eso para la construcción de aplicaciones basadas en Web. Los paquetes Django y Pyramid son dos marcos de aplicaciones Web populares que proporcionan más soporte para funciones avanzadas como análisis de solicitud, enrutamiento de URL y manejo de cookies.

Muchas bibliotecas existentes no funcionan con asyncio porque no se integran con el bucle de eventos. Un nuevo conjunto de bibliotecas como aiohttp se está creando para llenar este vacío como parte del proyeco aio-libs.

Correo electrónico

La interfaz para imaplib es relativamente de bajo nivel, requiriendo que comprender el protocolo IMAP para generar consultas y analizar los resultados. El paquete imapclient proporciona una interfaz de nivel superior con la que es más fácil trabajar para construir aplicaciones que necesitan manipular buzones IMAP.

Bloques de construcción de aplicaciones

Los dos módulos de biblioteca estándar para construir interfaces de línea de comando, argparse y getopt, ambos separan la definición de argumentos de línea de comando de su análisis sintáctico y procesamiento de valores. Alternativamente, click (el «kit de construcción de interfaz de línea de comando»), funciona definiendo funciones de procesamiento de comandos y luego asociando definiciones de opciones y de símbolos de sistema con esos comandos usando decoradores.

cliff («Marco de formulación de interfaz de línea de comandos») proporciona un conjunto de clases base para definir comandos y un sistema de complemento para extender aplicaciones con múltiples sub-comandos que pueden ser distribuidos en paquetes separados. Utiliza argparse para construir el texto de ayuda y el analizador de argumentos, por lo que el procesamiento de la línea de comando es familiar.

El paquete docopt invierte el flujo típico preguntando al desarrollador para que escriba el texto de ayuda de un programa, que luego analiza para entender los sub-comandos, combinaciones válidas de opciones y sub-comandos

Para programas interactivos basados en terminales, prompt_toolkit incluye características avanzadas como soporte de color, resaltado de sintaxis, edición de entrada, soporte de mouse e historial de búsqueda. Se puede usar para crear programas orientados a comandos con un bucle de solicitud como el módulo cmd o aplicaciones de pantalla completa, como editores de texto.

Mientras que los archivos INI como los usados por configparser continúan siendo populares para la configuración aplicaciones, el formato de archivo YAML también es muy popular. YAML proporciona muchas de las características de la estructura de datos de JSON en un formato que es más fácil de leer para las personas. La biblioteca PyYAML proporciona acceso a un analizador y un serializador de YAML.

Herramientas de desarrollo

El módulo venv de la biblioteca estándar es nuevo en Python 3. Para aislamiento de aplicación similar en Python 2 y 3, usa virtualenv.

El paquete fixtures proporciona varios clases para el manejo de recursos de pruebas hechas a medida para trabajar con el método addCleanup() de casos de prueba del módulo unittest. Las clases de fixtures proporcionadas pueden gestionar registradores, variables de entorno, archivos temporales y más de una manera consistente y segura que asegure que cada caso de prueba esté completamente aislado de otros en la suite.

El módulo distutils en la biblioteca estándar para empaquetar módulos de Python para distribución y reutilización están en desuso. El reemplazo, setuptools, se empaqueta por separado de la biblioteca estándar para facilitar la entrega de nuevas versiones con frecuencia. La interfaz para setuptools incluye herramientas para compilar la lista de archivos para incluir en un paquete. Hay extensiones para construir automáticamente la lista del conjunto de archivos administrados por un sistema de control de versiones. Por ejemplo, usando setuptools-git con código en un repositorio git hace que todos los archivos rastreados se incluyan en el paquete por defecto. Después de crear un paquete, la aplicación twine lo cargará al índice del paquetes para ser compartido con otros desarrolladores.

Herramientas como tabnanny son buenas para encontrar errores comunes de formateo en código Python. La Autoridad de calidad del código Python mantiene una amplia gama de herramientas de análisis estático más avanzadas, incluyendo herramientas que hacen cumplir las pautas de estilo, encuentran errores comunes de programación, e incluso ayudan a evitar la complejidad excesiva.

Ver también

  • Índice de Paquetes Python o PyPI – El sitio para encontrar y descargar módulos de extensión distribuidos por separado de Python.