<aside> 🪄

Pixi Advent Calendar 2025 10日目の記事です。

</aside>

前回までのあらすじ

<aside> 🗣

pixi global でシェルツールを華麗に管理する

でキラキラシェルツールを大量に仕入れた @denkiwakame であったが,非標準のツールを使い過ぎたためにチームで環境を共有できなくなってしまった.

    **/\___/ヽ   ヽ
   /    ::::::::::::::::\ つ キラキラが消えちゃう!!!!!!!!!!!!!!!!!!!!!!!!!!
  . |  ,,-‐‐   ‐‐-、 .:::| わ
  |  、_(o)_,:  _(o)_, :::|ぁぁ
.   |    ::<      .::|あぁ
   \  /( [三] )ヽ ::/ああ
   /`ー‐--‐‐―´\ぁあ**

</aside>

実験ツールをプロジェクトに紐づけて管理したい

<aside> 👼🏻

??? 「諦めないで….

</aside>

またか!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

<aside> 🪄

Pixi は複数の仮想環境をプロジェクトローカルに管理でき、Benchmark や lint 等、環境毎に必要なツールをコマンド一発 pixi install -aで再現できます。さらにtaskというタスクランナーを定義すれば、pixi run {task} で各環境に紐づくツールが透過的に使えるのです!

</aside>

Pixi Environment で Utlity Tool を管理する

pixi では複数の仮想環境をサポートしており, pixi add で作成されるのが default 環境です.

更に —feature を使って default 環境に追加する lintdev , benchmark の環境を管理することができます.

Multi Environment - Pixi by prefix.dev

例えば, benchmark の時だけ pueuehyperfine を使うとしましょう.

 pixi add --feature benchmark pueue hyperfine xh jq
✔ Added pueue
✔ Added hyperfine
✔ Added xh
✔ Added jq
Added these only for feature: benchmark

これらのツールは benchmark 環境のみに追加され, default には含まれないことになります.

[project]
authors = [{ name = "denkiwakame", email = "" }]
dependencies = []
name = "mylib"
requires-python = ">= 3.11"
version = "0.1.0"

[build-system]
build-backend = "hatchling.build"
requires = ["hatchling"]

[tool.pixi.workspace]
channels = ["conda-forge"]
platforms = ["linux-64"]

[tool.pixi.pypi-dependencies]
mylib = { path = ".", editable = true }
torch = { version = "==2.9.0", index = "<https://download.pytorch.org/whl/cu129>" }
torchvision = { version = ">=0.20.1", index = "<https://download.pytorch.org/whl/cu129>" }
xformers = { version = "*", index = "<https://download.pytorch.org/whl/cu129>" }

[tool.pixi.tasks]

[tool.pixi.feature.benchmark.dependencies]
pueue = "*"
hyperfine = "*"
xh = "*"
jq = "*"

[tool.pixi.environments]
benchmark = { features = ["benchmark"]} 

こんな感じの pyproject.toml を作ったとすると,

無印の pixi install では default 依存関係のみ install され,

 pixi install
✔ The default environment has been installed.

pixi install -a すると開発に必要な全ての依存関係が install されるのです.

 pixi install -a
✔ The following environments have been installed: default, benchmark.