rattler - Rust Conda Package Management Library
rattler é um conjunto de libraries Rust e ferramentas para trabalhar com o ecossistema de empacotamento conda, construído por prefix.dev. Ele reimplementa operações centrais do conda — parsing repodata, resolução de dependências, download e instalação de pacotes — com um solver rápido (resolvo) e sem dependência Python. É o motor por baixo de pixi, e seu companheiro rattler-build é uma substituição moderna para conda-build que constrói pacotes a partir de uma receita declarativa.
Componentes
| Componente | Propósito |
|---|
rattler (crates) | Libraries: repodata, solver, installer |
rattler-build | Construir pacotes conda a partir de receitas |
rattler-index | Gerar repodata de canal |
| resolvo | O solver de dependências SAT |
Instalando rattler-build
| Método | Comando |
|---|
| Cargo | cargo install rattler-build |
| pixi | pixi global install rattler-build |
| conda | conda install -c conda-forge rattler-build |
| Binary | baixe do GitHub Releases |
| Verificar | rattler-build --version |
Construindo um Pacote
# recipe.yaml
package:
name: mypackage
version: 1.0.0
source:
url: https://example.com/mypackage-1.0.0.tar.gz
sha256: abc123...
build:
number: 0
script: python -m pip install . -vv
requirements:
host:
- python >=3.9
- pip
run:
- python >=3.9
- numpy
tests:
- python:
imports:
- mypackage
about:
homepage: https://example.com
license: MIT
summary: An example package
rattler-build build --recipe recipe.yaml
| Comando | Descrição |
|---|
rattler-build build --recipe FILE | Construir o pacote |
rattler-build build -r . --target-platform linux-64 | Alvo cross-plataforma |
rattler-build test --package-file X.conda | Executar testes da receita |
rattler-build upload | Publicar em um canal |
--output-dir DIR | Onde artefatos compilados desembarcam |
| Seção | Propósito |
|---|
package | Nome e versão |
source | URL/git + checksum, ou caminho local |
build | Build number, script, skip conditions |
requirements | build / host / run / run_constraints |
tests | Import, script, e testes de conteúdo de pacote |
about | License, homepage, summary |
context | Variáveis reutilizáveis via Jinja |
context:
version: "1.0.0"
package:
name: mypackage
version: ${{ version }}
Variantes (Build Matrices)
# variants.yaml — construir contra várias versões de Python
python:
- "3.11"
- "3.12"
rattler-build build --recipe recipe.yaml --variant-config variants.yaml
Usando as Libraries Rust
// Conceitual: resolver e instalar um ambiente programaticamente
use rattler_solve::{SolverImpl, SolverTask};
// 1) fetch repodata para os canais
// 2) construir um SolverTask com suas specs
// 3) resolver → lista de package records
// 4) instalar em um prefixo com o installer de rattler
| Crate | Fornece |
|---|
rattler_repodata_gateway | Fetch/cache de repodata de canal |
rattler_solve | Resolução de dependência (resolvo) |
rattler_installs_packages | Instalar em um prefixo |
rattler_conda_types | Tipos centrais (MatchSpec, RepoData) |
rattler-build vs conda-build
| Aspecto | rattler-build | conda-build |
|---|
| Linguagem | Rust | Python |
| Velocidade | Muito mais rápido | Mais lento |
| Formato de receita | v1 recipe.yaml | meta.yaml |
| Dependências | Binário standalone | Requer conda/Python |
| Melhor para | Receitas novas, velocidade de CI | Receitas legadas |
Onde rattler Se Encaixa
| Ferramenta | Relação |
|---|
| pixi | Construído em rattler |
| conda-lock | Locking para fluxos conda clássicos |
| micromamba | Cliente conda rápido em C++ (esforço paralelo) |
| conda-forge | Cada vez mais constrói com rattler-build |
Recursos