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
| Composant | Objectif |
|---|
rattler (crates) | Bibliothèques : repodata, solveur, installeur |
rattler-build | Construire les paquets conda à partir des recettes |
rattler-index | Générer les repodata du canal |
| resolvo | Le solveur de dépendances SAT |
Installer rattler-build
| Méthode | Commande |
|---|
| Cargo | cargo install rattler-build |
| pixi | pixi global install rattler-build |
| conda | conda install -c conda-forge rattler-build |
| Binaire | télécharger depuis les GitHub Releases |
| Vérifier | rattler-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
| Commande | Description |
|---|
rattler-build build --recipe FILE | Construire le paquet |
rattler-build build -r . --target-platform linux-64 | Cible multi-plateforme |
rattler-build test --package-file X.conda | Exécuter les tests de la recette |
rattler-build upload | Publier sur un canal |
--output-dir DIR | Où les artefacts construits aboutissent |
| Section | Objectif |
|---|
package | Nom et version |
source | URL/git + checksum, ou chemin local |
build | Numéro de build, script, conditions skip |
requirements | build / host / run / run_constraints |
tests | Import, script, et tests de contenu de paquet |
about | Licence, page d’accueil, résumé |
context | Variables 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
| Crate | Fournit |
|---|
rattler_repodata_gateway | Récupérer/mettre en cache les repodata du canal |
rattler_solve | Résolution des dépendances (resolvo) |
rattler_installs_packages | Installer dans un préfixe |
rattler_conda_types | Types noyau (MatchSpec, RepoData) |
rattler-build vs conda-build
| Aspect | rattler-build | conda-build |
|---|
| Langage | Rust | Python |
| Vitesse | Beaucoup plus rapide | Plus lent |
| Format de recette | v1 recipe.yaml | meta.yaml |
| Dépendances | Binaire autonome | Nécessite conda/Python |
| Meilleur pour | Nouvelles recettes, vitesse CI | Recettes héritées |
Où rattler s’ajuste
| Outil | Relation |
|---|
| pixi | Construit sur rattler |
| conda-lock | Verrouillage pour les flux de travail conda classiques |
| micromamba | Client conda rapide C++ (effort parallèle) |
| conda-forge | Construit de plus en plus avec rattler-build |
Ressources