<aside> 🪄
Pixi Advent Calendar 2025 10日目の記事です。
</aside>
<aside> 🗣
でキラキラシェルツールを大量に仕入れた @denkiwakame であったが,非標準のツールを使い過ぎたためにチームで環境を共有できなくなってしまった.
**/\___/ヽ ヽ
/ ::::::::::::::::\ つ キラキラが消えちゃう!!!!!!!!!!!!!!!!!!!!!!!!!!
. | ,,-‐‐ ‐‐-、 .:::| わ
| 、_(o)_,: _(o)_, :::|ぁぁ
. | ::< .::|あぁ
\ /( [三] )ヽ ::/ああ
/`ー‐--‐‐―´\ぁあ**
</aside>
<aside> 👼🏻
??? 「諦めないで….」
</aside>
またか!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<aside> 🪄
Pixi は複数の仮想環境をプロジェクトローカルに管理でき、Benchmark や lint 等、環境毎に必要なツールをコマンド一発 pixi install -aで再現できます。さらにtaskというタスクランナーを定義すれば、pixi run {task} で各環境に紐づくツールが透過的に使えるのです!
</aside>
pixi では複数の仮想環境をサポートしており, pixi add で作成されるのが default 環境です.
更に —feature を使って default 環境に追加する lint や dev , benchmark の環境を管理することができます.
Multi Environment - Pixi by prefix.dev
例えば, benchmark の時だけ pueueや hyperfine を使うとしましょう.
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.