Introducción
Cuando desarrollas librerías o aplicaciones en Python, es fundamental asegurarte de que sean compatibles con diferentes versiones del intérprete. Esto es especialmente importante al publicar paquetes en PyPI, donde los usuarios pueden estar usando versiones variadas de Python. Instalar manualmente Python 3.7, 3.8, 3.9, 3.10 y probar cada versión consume mucho tiempo y esfuerzo.
Aquí es donde entra tox — una potente herramienta de automatización de pruebas que te permite ejecutar tests en entornos virtuales aislados con distintas versiones de Python. Tox se encarga de instalar dependencias automáticamente, crear entornos limpios y garantizar la reproducibilidad de los resultados.
¿Qué es tox y para qué sirve?
Tox (abreviatura de "testing out of the box") es una herramienta de línea de comandos escrita en Python que automatiza el proceso de prueba de proyectos Python en diferentes entornos. Crea entornos virtuales aislados, instala las dependencias necesarias y ejecuta las pruebas, permitiéndote verificar la compatibilidad de tu código con varias versiones de Python y distintos conjuntos de dependencias.
Principales ventajas de tox:
Aislamiento de entornos — cada prueba se ejecuta en un entorno virtual separado, eliminando conflictos de dependencias.
Automatización — el proceso de crear entornos, instalar dependencias y ejecutar pruebas es completamente automático.
Soporte multi-versión — posibilidad de probar simultáneamente en diferentes versiones de Python.
Reproducibilidad — garantiza resultados consistentes en distintos entornos.
Integración con CI/CD — configuración sencilla para pruebas automáticas en sistemas de integración continua.
Instalación y configuración inicial
Instalación de tox
Puedes instalar tox de varias maneras:
# Con pip
pip install tox
# Con conda
conda install -c conda-forge tox
# Con pipx (método recomendado)
pipx install tox
Creación del archivo de configuración básico
El archivo principal de configuración de tox es tox.ini, que debe estar en la raíz del proyecto:
[tox]
envlist = py38, py39, py310, py311
[testenv]
deps =
pytest
pytest-cov
commands =
pytest tests/ --cov=src/
Estructura del proyecto
Para que tox funcione correctamente, se recomienda la siguiente estructura de proyecto:
my_project/
├── src/
│ └── my_package/
│ ├── __init__.py
│ └── module.py
├── tests/
│ ├── __init__.py
│ └── test_module.py
├── tox.ini
├── setup.py (o pyproject.toml)
└── requirements.txt
Conceptos básicos de tox
Comandos esenciales
Tox ofrece una interfaz de línea de comandos simple:
# Ejecutar todos los entornos de envlist
tox
# Ejecutar un entorno específico
tox -e py39
# Ejecutar varios entornos
tox -e py38,py39,lint
# Forzar la recreación de entornos
tox -r
# Ejecutar con salida detallada
tox -v
# Salida muy detallada (para depuración)
tox -vv
Cómo funciona tox
El proceso de trabajo de tox consta de las siguientes etapas:
- Análisis de configuración — lectura del archivo
tox.iniy determinación de la lista de entornos - Creación de entornos virtuales — para cada intérprete de Python especificado
- Instalación del paquete — instalación del paquete a probar en cada entorno
- Instalación de dependencias — instalación de las dependencias indicadas en la sección
deps - Ejecución de comandos — ejecución de los comandos definidos en la sección
commands
También en la biblioteca
Procesamiento de JSON en Swift: Codable, JSONSerialization y ejemplos prácticos
Moshi para Kotlin: guía completa con ejemplos prácticos
Trabajo con Kafka en Kotlin: bibliotecas y ejemplos