Este episodio no se enseña en la universidad
Es el punto que llamamos "la brecha entre la academia y la industria" en las perspectivas integradas de BioPlayground. No existe un curso regular titulado "Parte 3: Herramientas de gestión ambiental" en el MIT, Harvard ni Stanford. ¿Por qué? Porque no se trata de algoritmos, ni de estadística, ni de biología. Sin embargo, la mitad del día de un profesional de la informática se decide aquí.
Cuando Conda tarda 30 minutos en ejecutar el solucionador para instalar una sola biblioteca nueva, no puedes escribir ningún código. Escribes en Slack: "Estoy instalando, llegaré 5 minutos tarde a la reunión". En este episodio, hagamos que esos 30 minutos duren 30 segundos. Se trata del problema de "cuántas tazas de café".
Es un episodio, pero no es un artículo académico. Es un episodio para poner manos a la obra e instalarlo ahora mismo en tu portátil.
¿Por qué Conda es tan lento?
El solucionador de Conda busca una combinación completa que satisfaga las restricciones de dependencias que exige cada paquete. Esto es un problema similar al bien conocido problema de SAT (Satisfacibilidad) en informática. Solo el canal Bioconda tiene más de 8.000 paquetes, cada uno con entre 3 y 10 versiones, y cada versión tiene múltiples restricciones de compatibilidad con versiones de Python, versiones de CUDA y sistemas operativos. El espacio de combinaciones explota exponencialmente.
El solucionador original de Conda está escrito en Python y recorre secuencialmente este espacio de combinaciones. Cuando se encuentra con una situación común de "dependencia circular" en Bioconda, el retroceso (backtracking) se dispara. Esta es la causa principal de las esperas de 30 minutos.
Árbol genealógico evolutivo: la llegada de Rust
2020: Mamba (QuantStack) — Mantiene el algoritmo del solucionador de Conda, pero lo reimplementa en C++. Es 10 veces más rápido. Pero la base sigue siendo Conda.
2022: micromamba — Convierte Mamba en un único archivo ejecutable. Se vuelve más fácil incluirlo en imágenes de Docker. Es el primer paso hacia la reproducibilidad de la infraestructura.
2023: Pixi (prefix.dev) — Una filosofía completamente diferente. Integra los canales de Conda y PyPI. Reescrito desde cero en Rust. Contiene todo en el archivo pixi.toml del proyecto y utiliza caché local. Ha trasladado la experiencia de Cargo (Rust), npm (Node) y Poetry (Python) al ámbito de la bioinformática.
2024: uv (Astral) — Específico para Python, pero extremadamente rápido. De 10 a 100 veces más rápido que pip. Escrito en Rust. Pixi utiliza uv internamente para gestionar la parte de Python.
Tres principios clave:
- Descarga asíncrona y paralela en Rust — Descarga simultáneamente decenas de archivos tar.
- Caché de enlaces duros: reutiliza los paquetes ya descargados. Al crear un nuevo proyecto, no se realizan copias en el disco.
- Archivo de bloqueo determinista: guarda la combinación exacta de versiones en un archivo. Seis meses después, otro miembro del equipo o el sistema CI pueden reproducir exactamente el mismo entorno.
Pixi.toml: el entorno del pipeline en un solo archivo
Ahora, pongámoslo en práctica. Abra SageMaker Studio Lab. Puede registrarse sin necesidad de tarjeta de crédito (consulte la sección 2-4 de las perspectivas integradas de v3).
Paso 1: Instalación de Pixi
# macOS y Linux comunescurl -fsSL https://pixi.sh/install.sh | bash
# Después de reiniciar el shellpixi --versionWindows es iwr -useb https://pixi.sh/install.ps1 | iex.
Paso 2: Inicialización del proyecto de la canalización
Creemos un proyecto de demostración para los ejercicios de BPD. Utilizaremos Salmon para el alineamiento por similitud y Scanpy para el postprocesamiento de células individuales; ambas herramientas deben ejecutarse en el mismo entorno.
mkdir bpd-pipelinecd bpd-pipelinepixi initSe crea el pixi.toml inicial. Modifíquelo según sus necesidades.
[project]
name = "bpd-pipeline"
version = "2026.1.0"
description = "Entorno del pipeline FASTQ to Paper para práctica S17~S21"
channels = ["conda-forge", "bioconda"]
platforms = ["linux-64", "osx-arm64"]
[dependencies]
# Herramientas de Linux
python = ">=3.11"
samtools = ">=1.19"
salmon = ">=1.10"
bwa = ">=0.7.17"
star = ">=2.7.11"
# Herramientas de datos Python
numpy = ">=1.26"
pandas = ">=2.2"
scanpy = ">=1.10"
[pypi-dependencies]
# Cosas no disponibles en Bioconda o solo más recientes en PyPI
anndata = ">=0.10"
scvi-tools = ">=1.1"
[tasks]
run-salmon = "salmon quant -i index -1 R1.fq -2 R2.fq -o out"
run-qc = "python scripts/qc.py"Paso 3: Instalación
pixi installLa primera ejecución tarda entre 10 y 30 segundos. Si se realiza con Conda, el mismo proceso puede tardar entre 5 y 15 minutos. Esto representa una diferencia de más de 100 veces para lograr exactamente el mismo resultado.
Paso 4: Ejecución
# Ejecutar tareas del pipeline (activación automática del entorno)pixi run run-qc
# Entrar al shell interactivopixi shellpixi run activa automáticamente el entorno. Se evitan los errores causados por olvidar o no configurar correctamente conda activate. Si existen los archivos pixi.toml y pixi.lock en el directorio raíz del proyecto, se utilizará ese entorno.
Paso 5: Compartir con el equipo
# En la computadora personal de un compañero de equipogit clone <repo>cd bpd-pipelinepixi install # Lee pixi.lock y reconstruye exactamente el mismo entornopixi.lock registra la versión, el hash y el canal exactos, lo que permite obtener el mismo entorno incluso un año después. La reproducibilidad de los artículos se garantiza a nivel de entorno, y no solo a nivel de código.
uv: velocidad extrema para proyectos exclusivamente en Python
A diferencia de Pixi, que integra canales de Conda (incluidas herramientas para Linux), uv está diseñado exclusivamente para proyectos de Python puro. Sin embargo, es entre 10 y 100 veces más rápido que pip.
# Instalar uvcurl -LsSf https://astral.sh/uv/install.sh | sh
# Inicializar proyectouv init my-analysiscd my-analysisuv add scanpy anndata numpy pandasuv run python -c "import scanpy; print(scanpy.__version__)"uv add se completa en cuestión de segundos. Dado que uv gestiona la parte de Python dentro de Pixi, en realidad ya se estaba utilizando uv indirectamente en el ejemplo anterior.
Cuándo usar Pixi vs. uv:
- Se necesitan herramientas de línea de comandos de Linux de Bioconda (bwa, samtools, etc.) → Pixi
- Proyecto puramente en Python, que se puede resolver solo con PyPI →
uv - Es esencial la reproducibilidad determinista en equipos y CI → Ambos generan archivos de bloqueo automáticamente
¿Sigue siendo válido Mamba?
Mamba (especialmente micromamba) sigue siendo válido en los siguientes casos:
- Mantenimiento de proyectos Conda existentes:
mamba installreemplaza directamente a Conda. - Inclusión de un único ejecutable dentro de una imagen Docker:
micromambapor sí solo simula todo el entorno de Conda. - Necesidad de canales de Conda en CI/CD: Mamba sigue siendo la opción estándar.
Si se inicia un nuevo proyecto, Pixi es la prioridad. Para proyectos existentes, migrar a Mamba. Si es Python puro, usar uv.
Mapeo de conceptos informáticos
- Solucionador SAT: El problema de satisfacción de restricciones de dependencias es un tipo de problema SAT. Pixi adopta el solucionador SAT en Rust llamado
resolvo. - Grafo de dependencias · Ordenamiento topológico: Si el paquete A requiere B, y B requiere C → DAG (grafo acíclico dirigido). Se produce un error si hay dependencias circulares.
- Caché mediante enlaces duros: Compartición de inodos en el sistema de archivos Linux. Al crear un nuevo proyecto, se utiliza una referencia en lugar de una copia real de los datos.
- Archivo de bloqueo determinista: Similar a las funciones puras en la programación funcional. Si la entrada (
.toml) es igual, la salida (.lock) también lo será.
Errores comunes
- Ejecutar
pip installdentro del proyecto Pixi — El archivo de bloqueo no se actualiza. Se rompe la reproducibilidad. Es obligatorio usarpixi add. - Incluir
pixi.locken.gitignore— Absolutamente prohibido. El archivo de bloqueo debe incluirse en el repositorio (commit). La carpeta.pixi/debe estar en el archivo.gitignore. - Inversión del orden de prioridad del canal Bioconda — El orden en
channelsdefine la prioridad. El estándar es Bioconda primero y Conda-Forge después. - No generación de archivos de bloqueo por plataforma — Si solo existe
platforms = ["linux-64"], fallarápixi installen macOS. Especificar todas las plataformas necesarias. - Desajuste de GLIBC dentro del contenedor — Pixi en sí no tiene problemas, pero en imágenes base Docker muy antiguas (por ejemplo, CentOS 7) pueden surgir problemas de versión de GLIBC. Se recomienda Ubuntu 22.04 o superior.
Próximo capítulo: bifurcación hacia el siguiente tema
- F27~F28: Snakemake · Nextflow DSL2 — Orquestación de flujos de trabajo. Un grafo de ejecución que se integra con la gestión del entorno.
- F29: Recorrido por los flujos de trabajo estándar de nf-core. rnaseq, sarek, scrnaseq y otros, todos validados para uso comercial.
- F30: Docker · Apptainer/Singularity — Aislamiento que va más allá del entorno, hasta el nivel del kernel. Esencial en entornos de computación de alto rendimiento (HPC).
- F31: HPC · Slurm — Ejecución masiva en paralelo. Recursos disponibles bajo demanda en la nube.
Para profundizar más
Este capítulo no incluye un curso universitario formal. Los materiales de referencia son la documentación oficial de las herramientas.
- pixi.sh — Documentación oficial de Pixi. El tutorial está bien redactado.
- docs.astral.sh/uv — Documentación oficial de uv.
- mamba.readthedocs.io — Mamba/micromamba.
- bioconda.github.io — Convenciones del canal Bioconda · Métodos para registrar paquetes.
- EMBL-EBI Training — Nextflow and Containers for Scalable Workflows (42 minutos, con subtítulos completos). Sirve como puente hacia el siguiente capítulo, F28.
- Broad Institute — How to Run GATK4 in a Docker Container (40 minutos, con subtítulos completos). Preparación práctica para F30.
- Blog de referencia: Joseph Guhlin's Pixi/uv: Bioinformatics Powerhouse (2024). Relato de experiencia de migración desde la perspectiva de un profesional. Permite comprender por qué el ecosistema Rust ha comenzado a integrarse con la bioinformática.
Una vez superado el período de espera de 30 minutos, avancemos desde F27 hacia el mundo real de la orquestación de flujos de trabajo. pixi.toml resume los resultados de este capítulo. Si comparte esto con su equipo, se resolverá a medias el problema de reproducibilidad del equipo.