Bioconda のインストールに pixi を使うと何がいいのか調べて試してみた
はじめに
Bioconda のツールを入れるなら今は pixi が良いと聞いたので、調べて試してみました。
pixi とは
pixi は prefix.dev が開発しているパッケージマネージャーで、Rust で書かれています。conda のエコシステムの上に作られていて、conda-forge や bioconda のチャンネルからパッケージを入れられます。インストールしたパッケージ一式(環境)は、ワークスペースと呼ぶディレクトリ単位で管理されます。conda では conda create -n <名前> で名前付きの環境を作り、使うたびに conda activate で切り替えていたやつです。
Bioconda 公式ドキュメントでは pixi 推し
Bioconda 公式ドキュメントでは pixi の手順が conda より先に載っており、conda パッケージと環境を扱うフロントエンドとして紹介されています。
Pixi is a modern, extremely fast, frontend for conda packages and environments.
なにが嬉しいのか
ワークスペースのディレクトリで pixi run と実行すれば、conda activate を挟まずにその環境でコマンドを実行できます。
私は普段 Python では uv を使っています。uv は Astral が開発するパッケージマネージャーで、pip や virtualenv の代わりに Python のパッケージとプロジェクトを管理できます。conda activate を挟まずに実行でき、実行前に実行環境を整えるのは、uv の uv run と同じでした。
When using
run, uv will ensure that the project environment is up-to-date before running the given command.
では uv と何が違うのか、気になって確認しました。
結論としては、uv の使い勝手のまま conda のパッケージを扱うなら、pixi を使うと良いです。
uv は既定では PyPI からパッケージを入れ、conda-forge や bioconda のチャンネルは使えません。uv の GitHub には conda 対応を求める Issue が 2024 年に立ち、2026 年 9 月 23 日時点でもオープンのままでした。メンテナーは対象外になりそうだと答え、conda との統合には prefix.dev が注力していると案内しています。
This might be out of scope for us. I'm not sure about the long-term future, but definitely in the short term. Prefix.dev is more focused on conda integration.
出典: Add support for managing Conda environments and packages · Issue #1703 · astral-sh/uv
今回使った 5 つのツールが PyPI にあるかを確認しました。samtools、bowtie2、seqkit、fastqc はありませんでした。PyPI にあったのは multiqc だけです。
pixi はパッケージを conda と PyPI のどちらから入れるかはパッケージを追加するときに決めます。pixi add は conda のパッケージ、pixi add --pypi は PyPI のパッケージとして追加します。pixi は conda のパッケージの依存関係を先に解決し、使う Python のバージョンなどを決めます。そのあとで PyPI のパッケージとその依存を解決します。この PyPI のパッケージの依存関係を解決しているのが pixi に組み込まれた uv です。なんだかんだ、ここにも uv がいました。
Pixi can install packages from both ecosystems, but it uses a conda-first approach.
conda より mamba が速いという話はどこへいった?
conda より mamba のほうが速い、と以前はよく聞きました。いまはどうなのか気になって調べました。mamba は conda を C++ で作り直したパッケージマネージャーで、依存関係の解決に libmamba を使います。
conda も 23.10.0 で、既定のソルバーを conda-libmamba-solver に切り替えていました。このソルバーは mamba と同じ libmamba を使います。conda 公式のアナウンスでは、切り替えの目的を高速化と精度の向上だと説明しています。
In short: to make conda faster and more accurate.
出典: Conda 23.10.0: libmamba is now the default solver | conda.org
conda も mamba と同じ libmamba で依存関係を解決します。なるほど、3 年ほど前に依存関係の解決だけ見れば差がなくなっていました。
pixi を入れてワークスペースを作る
ではさっそく pixi を試してみます。インストールから Bioconda のツールを動かすところまで順に進めます。
pixi をインストールする
公式のインストールスクリプトを実行します。
curl -fsSL https://pixi.sh/install.sh | sh
チャンネルを指定して初期化する
pixi init に渡したチャンネルは、渡した順序で pixi.toml に書き込まれます。Bioconda 公式の案内に合わせ、conda-forge を先、bioconda を後ろに指定します。最後の ws_pixi はワークスペースを作るディレクトリです。ディレクトリはこのコマンドで作られ、その名前がワークスペース名にもなります。
pixi init --channel conda-forge --channel bioconda ws_pixi
cd ws_pixi
ツールを追加する
pixi add に必要なパッケージを指定します。依存解決とインストールに加え、pixi.lock の生成までこのコマンドで一発です。
pixi add seqkit bowtie2 samtools fastqc multiqc
出力は追加したパッケージ 1 つにつき 1 行、全部で 5 行だけでした。
✔ Added seqkit >=2.13.0,<3
✔ Added bowtie2 >=2.5.5,<3
✔ Added samtools >=1.24,<2
✔ Added fastqc >=0.12.1,<0.13
✔ Added multiqc >=1.35,<2
依存を含めて入ったパッケージは 157 個でした。一覧は pixi list で確認できます。
追加後に pixi.toml を確認してみます。
cat pixi.toml
指定したチャンネルと実行中のプラットフォーム、追加した 5 つの依存が入っています。pixi add はバージョンを指定しなくても >=2.13.0,<3 のように上限付きの範囲を書き込むため、次のメジャーバージョンには上がりません。
[workspace]
channels = ["conda-forge", "bioconda"]
name = "ws_pixi"
platforms = ["linux-aarch64"]
version = "0.1.0"
[tasks]
[dependencies]
seqkit = ">=2.13.0,<3"
bowtie2 = ">=2.5.5,<3"
samtools = ">=1.24,<2"
fastqc = ">=0.12.1,<0.13"
multiqc = ">=1.35,<2"
追加したツールを実行する
ワークスペースのディレクトリで samtools のバージョンを表示します。pixi run は conda activate にあたる操作を挟まずに、環境内のコマンドを起動します。
pixi run samtools --version
samtools 1.24
Using htslib 1.24
conda、mamba、pixi で初回インストールの所要時間を比べてみた
pixi でのインストールが速いのか気になったので、conda、mamba と初回インストールの所要時間を比べてみました。EC2 の構築手順は省略します。Ubuntu の EC2 に Bioconda の実行環境を用意する手順は、以下の記事にまとめています。
conda と mamba は Miniforge3 で、pixi は公式のインストールスクリプトで入れました。
| 項目 | 値 |
|---|---|
| インスタンスタイプ | c9g.large |
| CPU | Graviton 5 |
| メモリ | 4 GiB |
| OS | Ubuntu 26.04.1 LTS |
| conda | 26.7.2 |
| mamba | 2.9.0 |
| pixi | 0.81.0 |
| 計測日 | 2026/09/19 |
計測したのはキャッシュのない状態からの初回インストールだけです。conda、mamba、pixi を 3 回ずつ測る 1 巡を 2 回繰り返し、合計 18 回測りました。1 巡目は conda、mamba、pixi の順、2 巡目は逆順です。ネットワークの当たり外れが特定のツールへ偏らないようにするためです。チャンネルはどれも conda-forge を最優先、bioconda を次点にそろえました。conda と mamba では channel_priority を strict にしています。
条件をそろえるため、1 回ごとにパッケージキャッシュも消しています。base 環境からリンクされているパッケージは conda clean -a の削除対象から外れ、パッケージキャッシュに残ります。conda clean -a だけでは python などの共通パッケージのダウンロードが省かれてしまいます。そこで CONDA_PKGS_DIRS を計測用のディレクトリへ向け、毎回まるごと削除しました。
キャッシュは計測のたびに次のコマンドで消しました。pixi のキャッシュも同じタイミングで消しています。
export CONDA_PKGS_DIRS=/home/ubuntu/bench/pkgs_cache
conda clean -a -y
rm -rf "$CONDA_PKGS_DIRS"
pixi clean cache --yes
rm -rf ~/.cache/rattler ~/.cache/pixi
所要時間を測ったのは次のパッケージのインストールです。基本的なものをピックアップしたつもりです。pixi は pixi init で作ったワークスペースの中で pixi add を実行しています。
conda create -y -n bench_conda seqkit bowtie2 samtools fastqc multiqc
mamba create -y -n bench_mamba seqkit bowtie2 samtools fastqc multiqc
pixi add seqkit bowtie2 samtools fastqc multiqc
pixi は速かった
6 回分の中央値、最小、最大は次のとおりです。pixi 比は中央値どうしの比率です。
| ツール | 中央値(秒) | 最小(秒) | 最大(秒) | pixi 比 |
|---|---|---|---|---|
| pixi | 19.5 | 17.8 | 20.6 | 1.0 |
| conda | 32.9 | 27.9 | 34.4 | 1.7 |
| mamba | 37.8 | 35.5 | 79.9 | 1.9 |
pixi はおよそ 20 秒で最も速く、ばらつきも最小でした。conda はおよそ 33 秒で pixi の 1.7 倍、mamba はおよそ 38 秒です。今回の計測では conda より mamba のほうが遅くなりました。
パッケージ数とバージョンは conda、mamba、pixi でほぼ同じだった
パッケージ数と環境サイズは次のとおりです。
| ツール | パッケージ数 | 環境サイズ |
|---|---|---|
| pixi | 157 | 1.7 GiB |
| conda | 158 | 1.8 GiB |
| mamba | 157 | 1.8 GiB |
インストールされたバージョンも conda、mamba、pixi の 3 つすべて一致していました。
今回の検証でインストールしたパッケージは AWS Graviton でも最新版が利用できた
Graviton で測ったので、linux-aarch64 での提供状況も調べました。対象は、計測で入れた seqkit、bowtie2、samtools、fastqc、multiqc の 5 つです。5 つとも、手に入る最新版は linux-64 と同じでした。
提供状況は anaconda.org の API(https://api.anaconda.org/package/bioconda/<パッケージ名>)でプラットフォーム別に確認しました。
| パッケージ | linux-64 で手に入る最新版 | linux-aarch64 で手に入る最新版 |
|---|---|---|
| bowtie2 | 2.5.5 | 2.5.5 |
| fastqc | 0.12.1(noarch) | 0.12.1(noarch) |
| multiqc | 1.35(noarch) | 1.35(noarch) |
| samtools | 1.24 | 1.24 |
| seqkit | 2.13.0 | 2.13.0 |
最新版は linux-64 と同じでしたが、過去のバージョンは linux-aarch64 にないものがありました。論文の再現などでバージョンを指定する場合は、先に提供状況を確認してください。
まとめ
Bioconda のツール 5 つを pixi で入れ、conda と mamba の初回インストール時間と比べました。中央値は pixi がおよそ 20 秒、conda がおよそ 33 秒、mamba がおよそ 38 秒です。入るパッケージとバージョンは conda、mamba、pixi で変わりませんでした。5 つとも、linux-aarch64 で手に入る最新版は linux-64 と一致していました。
おわりに
pixi はなんなのか調べて試した内容をまとめました。ARM で検証したいことがあったので Graviton で処理する前提で良い環境構築方法を模索してみます。







