Pular para o conteúdo

rattler - Rust Conda Package Management Library

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

ComponentePropósito
rattler (crates)Libraries: repodata, solver, installer
rattler-buildConstruir pacotes conda a partir de receitas
rattler-indexGerar repodata de canal
resolvoO solver de dependências SAT

Instalando rattler-build

MétodoComando
Cargocargo install rattler-build
pixipixi global install rattler-build
condaconda install -c conda-forge rattler-build
Binarybaixe do GitHub Releases
Verificarrattler-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
ComandoDescrição
rattler-build build --recipe FILEConstruir o pacote
rattler-build build -r . --target-platform linux-64Alvo cross-plataforma
rattler-build test --package-file X.condaExecutar testes da receita
rattler-build uploadPublicar em um canal
--output-dir DIROnde artefatos compilados desembarcam

Destaques do Formato de Receita (v1)

SeçãoPropósito
packageNome e versão
sourceURL/git + checksum, ou caminho local
buildBuild number, script, skip conditions
requirementsbuild / host / run / run_constraints
testsImport, script, e testes de conteúdo de pacote
aboutLicense, homepage, summary
contextVariá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
CrateFornece
rattler_repodata_gatewayFetch/cache de repodata de canal
rattler_solveResolução de dependência (resolvo)
rattler_installs_packagesInstalar em um prefixo
rattler_conda_typesTipos centrais (MatchSpec, RepoData)

rattler-build vs conda-build

Aspectorattler-buildconda-build
LinguagemRustPython
VelocidadeMuito mais rápidoMais lento
Formato de receitav1 recipe.yamlmeta.yaml
DependênciasBinário standaloneRequer conda/Python
Melhor paraReceitas novas, velocidade de CIReceitas legadas

Onde rattler Se Encaixa

FerramentaRelação
pixiConstruído em rattler
conda-lockLocking para fluxos conda clássicos
micromambaCliente conda rápido em C++ (esforço paralelo)
conda-forgeCada vez mais constrói com rattler-build

Recursos