Aller au contenu

rattler - Bibliothèque de gestion de paquets Conda Rust

rattler - Bibliothèque de gestion de paquets Conda Rust

rattler est un ensemble de bibliothèques Rust et d’outils pour travailler avec l’écosystème de packaging conda, construit par prefix.dev. Il réimplémente les opérations principales de conda — analyse des repodata, résolution des dépendances, téléchargement et installation de paquets — avec un solveur rapide (resolvo) et sans dépendance Python. C’est le moteur sous-jacent de pixi, et son compagnon rattler-build est un remplacement moderne pour conda-build qui construit les paquets à partir d’une recette déclarative.

Composants

ComposantObjectif
rattler (crates)Bibliothèques : repodata, solveur, installeur
rattler-buildConstruire les paquets conda à partir des recettes
rattler-indexGénérer les repodata du canal
resolvoLe solveur de dépendances SAT

Installer rattler-build

MéthodeCommande
Cargocargo install rattler-build
pixipixi global install rattler-build
condaconda install -c conda-forge rattler-build
Binairetélécharger depuis les GitHub Releases
Vérifierrattler-build --version

Construire un paquet

# 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
CommandeDescription
rattler-build build --recipe FILEConstruire le paquet
rattler-build build -r . --target-platform linux-64Cible multi-plateforme
rattler-build test --package-file X.condaExécuter les tests de la recette
rattler-build uploadPublier sur un canal
--output-dir DIROù les artefacts construits aboutissent

Points clés du format de recette (v1)

SectionObjectif
packageNom et version
sourceURL/git + checksum, ou chemin local
buildNuméro de build, script, conditions skip
requirementsbuild / host / run / run_constraints
testsImport, script, et tests de contenu de paquet
aboutLicence, page d’accueil, résumé
contextVariables réutilisables via Jinja
context:
  version: "1.0.0"
package:
  name: mypackage
  version: ${{ version }}

Variantes (matrices de build)

# variants.yaml — construire contre plusieurs versions Python
python:
  - "3.11"
  - "3.12"
rattler-build build --recipe recipe.yaml --variant-config variants.yaml

Utiliser les bibliothèques Rust

// Conceptuel : résoudre et installer un environnement par programmation
use rattler_solve::{SolverImpl, SolverTask};
// 1) récupérer repodata pour les canaux
// 2) construire une SolverTask avec vos specs
// 3) résoudre → liste de dossiers de paquets
// 4) installer dans un préfixe avec l'installeur de rattler
CrateFournit
rattler_repodata_gatewayRécupérer/mettre en cache les repodata du canal
rattler_solveRésolution des dépendances (resolvo)
rattler_installs_packagesInstaller dans un préfixe
rattler_conda_typesTypes noyau (MatchSpec, RepoData)

rattler-build vs conda-build

Aspectrattler-buildconda-build
LangageRustPython
VitesseBeaucoup plus rapidePlus lent
Format de recettev1 recipe.yamlmeta.yaml
DépendancesBinaire autonomeNécessite conda/Python
Meilleur pourNouvelles recettes, vitesse CIRecettes héritées

Où rattler s’ajuste

OutilRelation
pixiConstruit sur rattler
conda-lockVerrouillage pour les flux de travail conda classiques
micromambaClient conda rapide C++ (effort parallèle)
conda-forgeConstruit de plus en plus avec rattler-build

Ressources