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.