---
title: "Pixiとは？Python・conda対応のパッケージ管理ツールの使い方とuv・condaとの違い"
url: "https://www.issoh.co.jp/tech/details/9892/"
published: 2025-11-19
updated: 2026-10-13
categories: ["Python"]
publisher: "株式会社一創"
---

# Pixiとは？Python・conda対応のパッケージ管理ツールの使い方とuv・condaとの違い

Pixi（ピクシー）は、prefix.devが開発するRust製のパッケージ・環境管理ツールです。conda-forgeのcondaパッケージとPyPIのパッケージを1つの設定ファイル（`pixi.toml`）で管理し、Windows・macOS・Linuxそれぞれの解決結果をロックファイルに記録し、各OSで同じ構成の環境を再現します。イラストSNSの「pixiv」、化粧品ブランドの「Pixi Beauty」、2D描画ライブラリの「PixiJS」とは別物です。

この記事では、Pixi 0.81.0（[2026年9月15日リリース](https://github.com/prefix-dev/pixi/releases)）をmacOS上で実行した結果をもとに、インストールから`pixi init`・`pixi add`・`pixi run`の使い方、`pixi.lock`の扱い、condaとPyPIを混ぜたときの挙動、environment.ymlからの移行までを順に説明します。

## まとめ｜Pixiの要点

- **condaとPyPIを1ファイルで管理**：Pythonそのものもcondaパッケージとして`pixi add python=3.12`で入ります。PyPIのパッケージは`pixi add --pypi`で同じ`pixi.toml`に書かれます。
- **環境はプロジェクトごと**：環境は各プロジェクトの`.pixi`ディレクトリに作られ、condaのような`activate`は要りません。`pixi run`がその環境でコマンドを実行します。
- **ロックファイルが自動で付く**：`pixi add`のたびに`pixi.lock`が更新され、パッケージのURLまで記録されます。CIでは`--locked`を付けると、設定とロックのずれをエラーで止められます。
- **同じパッケージを両方に書くとcondaが勝つ**：PixiはcondaのパッケージとPyPIのパッケージを順に解決します。両方に同じパッケージがあればcondaのものが入り、PyPI側の版指定と食い違うと解決自体が失敗します。
- **依存がPyPIだけで完結するならuvで足りる**：CUDA・GDAL・HDF5のようにC/C++ライブラリを伴うパッケージや、R・C++を混ぜるプロジェクトがPixiの出番です。PyPIだけで完結するならuvの方が手数が少なく済みます。

## Pixiとは｜prefix.devが開発するconda・PyPI両対応のツール

Pixiはcondaエコシステムのパッケージを扱うツールです。既定のチャネルは、[公式サイト](https://pixi.prefix.dev/latest/)の記載で3万を超えるパッケージを持つconda-forgeです。Pythonのほか、C/C++（clang・boost・opencv）、Java（openjdk）、Rust、Node.js、gitやripgrepのようなCLIツールもcondaパッケージとして入ります。ライセンスはBSD-3-Clause、ソースは[GitHubのprefix-dev/pixi](https://github.com/prefix-dev/pixi)で公開されています。

中身は2つの解決器の組み合わせです。condaパッケージはprefix.devのRustライブラリ群（rattler）で解決し、PyPIのパッケージはAstralのuvをライブラリとして組み込んで解決します。[公式の解説](https://pixi.prefix.dev/latest/concepts/conda%5Fpypi/)には「Pixi doesn't install uv (the tool) itself」とあり、uvを別途インストールする必要はありません。

速度については、prefix.devが2024年3月1日の[ブログ](https://prefix.dev/blog/pixi%5Fa%5Ffast%5Fconda%5Falternative)で「環境をゼロから解決・インストールする場合、micromambaの約3倍、condaの10倍超速い」（M2 MacBook Proでの計測）と公表しています。開発元による2年以上前の版での計測なので、目安として扱ってください。

版は0.x系のまま、2026年7〜9月だけで15回リリースされています（0.72.0が7月1日、0.81.0が9月15日）。サブコマンドの名前や設定のキーが版ごとに変わることがあるため、チームでは`pixi --version`を揃えてから使い始めてください。

### conda・pip・Poetry・uvとの機能比較

公式サイトの比較表を出発点に、各ツールの2026年10月時点の公式ドキュメントで補正すると次のとおりです。5つの中でタスクランナーを内蔵するのはPixiだけです。

| 機能              | Pixi | conda     | pip    | Poetry | uv |
| --------------- | ---- | --------- | ------ | ------ | -- |
| Python本体のインストール | ○    | ○         | ×      | △（実験的） | ○  |
| 複数言語のパッケージ      | ○    | ○         | ×      | ×      | ×  |
| ロックファイル         | ○    | △（26.5以降） | △（実験的） | ○      | ○  |
| タスクランナー         | ○    | ×         | ×      | ×      | ×  |

公式の表ではPoetryのPython導入、condaとpipのロックファイルが×ですが、いずれも後から機能が加わっています。Poetryは2.1.0で[poetry python install](https://python-poetry.org/docs/cli/#python-install)を実験的機能として追加しました。condaは26.5で、condaとPyPIのパッケージを含む環境を複数OS分まとめてロックできるようになったと[conda.orgのブログ](https://conda.org/blog/2026-06-25-bridging-conda-and-pypi-ecosystems/)が説明しています。pipの[pip lock](https://pip.pypa.io/en/stable/cli/pip%5Flock/)は実験的機能で、生成したロックは実行したPythonの版とプラットフォームでしか有効と保証されません。

condaとpipの違いそのものは[pipとcondaの違いと使い分け｜Anaconda・Miniconda・商用ライセンスまで解説](/tech/details/7775/)、PyPIだけを扱うツールは[uvとは？Pythonの環境構築・パッケージ管理・バージョン管理の使い方を徹底解説](/tech/details/4384/)と[Poetryとは？Python依存管理の仕組みと2.5系の使い方・uvとの選び方](/tech/details/12303/)で詳しく説明しています。

### Pixiを選ぶ場面と選ばない場面

Pixiを選ぶのは、PyPIのwheelだけでは環境が揃わないときです。GDAL・HDF5・NetCDF・CUDA Toolkitのように、Pythonパッケージの下にC/C++/Fortranのライブラリが要る場合、conda-forgeはそれらを一緒に配布します。PythonとRを同じ環境で動かす研究用のプロジェクトや、公式サイトが特徴に挙げるROS 2（RoboStack経由）のロボティクス開発も向いています。

選ばないのは、依存がPyPIだけで完結するWebアプリやライブラリです。この場合uvで足り、condaパッケージの解決を挟まない分だけ構成が単純になります。また、社内でAnacondaのdefaultsチャネルを契約して使っている組織では、既定がconda-forgeであるPixiに切り替えると入るビルドが変わります。チャネル設定を揃えてから移行してください。複数言語の開発環境をまとめて再現したいだけなら、[mise](/tech/details/17621/)やNixベースの[Devbox](/tech/details/8323/)も候補になります。Python以外の部分も含めて開発基盤を組み直す場合は、[フルスクラッチ開発の支援](/service/system/fullscratch/)で環境構築から相談を受けています。

## Pixiのインストール方法｜macOS・Linux・Windows

### 公式スクリプトとパッケージマネージャー

macOSとLinuxは公式のインストールスクリプトを使います。`pixi`のバイナリは`~/.pixi/bin`に置かれ、シェルの起動スクリプトにPATHが追記されます。インストール後はターミナルを開き直してください。

```
# macOS・Linux
curl -fsSL https://pixi.sh/install.sh | sh

# curlが無い環境
wget -qO- https://pixi.sh/install.sh | sh

# Windows（PowerShell）
powershell -ExecutionPolicy Bypass -c "irm -useb https://pixi.sh/install.ps1 | iex"
```

Windowsのバイナリは`%UserProfile%\.pixi\bin`に入ります。[公式のインストール手順](https://pixi.prefix.dev/latest/installation/)には、ほかに`brew install pixi`（Homebrew）、`winget install prefix-dev.pixi`、`scoop install main/pixi`、GitHub ReleasesのMSIインストーラーが載っています。

### 版の固定・更新とインストール先の変更

スクリプト版は環境変数で挙動を変えられます。チームで版を揃えるときは`PIXI_VERSION`、ホームディレクトリ以外に置くときは`PIXI_HOME`や`PIXI_BIN_DIR`を指定します。

```
# 版を指定して入れる
curl -fsSL https://pixi.sh/install.sh | PIXI_VERSION=v0.81.0 bash

# 更新（スクリプトで入れた場合）
pixi self-update
pixi self-update --version 0.81.0
```

Homebrewやcondaで入れた場合は`pixi self-update`ではなく、`brew upgrade pixi`のように入れたツールの側で更新します。

## Pixiの使い方｜init・add・runで環境を作る

### pixi initで作られるファイル

`pixi init demo`を実行すると、`demo`ディレクトリに`pixi.toml`・`.gitignore`・`.gitattributes`の3つができます。0.81.0で生成された`pixi.toml`は次のとおりです（authorsはGitの設定から入ります）。

```
[workspace]
authors = ["Your Name <you@example.com>"]
channels = ["conda-forge"]
name = "demo"
platforms = ["osx-64"]
version = "0.1.0"

[tasks]

[dependencies]
```

`platforms`には実行したマシンの種類（ここではIntel Macの`osx-64`）だけが入ります。他のOSのメンバーがいるなら、後述の`pixi workspace platform add`で足してください。設定ファイルの名前は`pixi.toml`で、YAML形式の`pixi.yaml`はありません。また、先頭の表は以前`[project]`でしたが、[0.57.0（2025年10月20日）のCHANGELOG](https://github.com/prefix-dev/pixi/blob/main/CHANGELOG.md)で非推奨となり、`[workspace]`へ置き換えるよう案内されています。古い解説記事の`pixi.toml`を写すときは表の名前を確認してください。

### pixi addによるPythonとパッケージの追加

Pythonもnumpyも`pixi add`で入れます。PyPIから入れるパッケージには`--pypi`を付けます。

```
cd demo
pixi add python=3.12 numpy
pixi add --pypi requests
```

実行後の`pixi.toml`には、依存がconda側とPyPI側に分かれて書かれます。`python=3.12`は`"3.12.*"`に、版を指定しなかったnumpyは解決した版を下限にした範囲に書き換わります。

```
[dependencies]
python = "3.12.*"
numpy = ">=2.5.4,<3"

[pypi-dependencies]
requests = ">=2.34.2, <3"
```

このときパッケージはプロジェクト直下の`.pixi/envs/default`に入り、`pixi.lock`も同時に書かれます。`pixi install`を別に打つ必要はありません。

### pixi run・pixi shell・タスクの定義

`pixi run`は、プロジェクトの環境を有効にした状態でコマンドを実行します。よく使うコマンドは`pixi task add`でタスクとして登録できます。

```
pixi task add hello "python -c 'import numpy, requests, sys; print(sys.version.split()[0], numpy.__version__, requests.__version__)'"
pixi run hello
# ✨ Pixi task (hello): python -c ...
# 3.12.15 2.5.4 2.34.2
```

タスクは`pixi.toml`の`[tasks]`に書かれるので、`test = "pytest"`のように直接書いても同じです。対話的に作業したいときは`pixi shell`で環境に入り、`exit`で抜けます。condaの`conda activate`に当たるコマンドはなく、Bash・Zshの設定ファイルやCIで有効化したいときは`eval "$(pixi shell-hook)"`のように、`pixi shell-hook`が出力する有効化スクリプトを読み込みます。PowerShellでは`(pixi shell-hook) | Out-String | Invoke-Expression`です。

## pixi.tomlとpixi.lockで環境を再現する仕組み

### pixi.lockに記録される内容

`pixi.lock`はYAML形式で、環境ごと・プラットフォームごとに、入るパッケージのURLを1件ずつ記録します。上の例（python・numpy・requests）では、osx-64の1プラットフォームだけで31件のパッケージが並び、ファイルは480行でした。先頭は次のような形です。

```
version: 7
platforms:
- name: osx-64
environments:
  default:
    channels:
    - url: https://conda.anaconda.org/conda-forge/
    indexes:
    - https://pypi.org/simple
    packages:
      osx-64:
      - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-2.5.4-py312h66ee8b4_0.conda
      - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.15-h6907cb8_1_cpython.conda
```

`pixi init`が作る`.gitattributes`には`pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff`と書かれています。ロックファイルはGitにコミットして共有する前提で、マージ時に行単位で混ぜないよう設定されています。`.gitignore`は`.pixi/*`を除外するので、環境の実体はコミットされません。

### lockedとfrozenの違い

CIや本番で「ロックファイルどおりに入れる」ための指定が2つあります。`pixi.toml`の`python`を`"3.13.*"`に書き換え、ロックは3.12のまま、という状態で試すと違いがはっきりします。

| コマンド                    | 結果             | 使いどころ           |
| ----------------------- | -------------- | --------------- |
| `pixi install --locked` | エラーで停止         | CIで設定とロックのずれを検出 |
| `pixi install --frozen` | ロックの3.12.15を導入 | ロックを正として再現      |
| オプションなし                 | ロックを3.13.16へ更新 | 手元の開発           |

`--locked`のときに出たメッセージは「lock file not up-to-date with the workspace」でした。`--frozen`は設定ファイルの変更を無視するので、設定を直したのにロックを更新し忘れた、という事故を見逃します。CIでは`--locked`を使い、ずれたら手元で`pixi install`（または`pixi lock`）してロックをコミットし直す運用にしてください。

### pixi updateとpixi upgradeの違い

名前が似ていますが、触るファイルが違います。`pixi update`は`pixi.toml`の範囲内でロックを新しくします。`pixi upgrade`は、[公式のコマンドリファレンス](https://pixi.prefix.dev/latest/reference/cli/pixi/upgrade/)にあるとおり「loosens the requirements」、つまり`pixi.toml`の制約自体を緩めて最新版へ書き換えます。

`python = "3.12.*"`の状態で`pixi upgrade --dry-run python`を実行すると、変更予定はPython 3.15.0でした。`pixi update`なら3.12系にとどまります。Pythonのマイナーバージョンを上げる意図がないときに`upgrade`を打つと、Pythonの版まで上がる点に注意してください。`--dry-run`を付ければ、書き換えずに変更内容だけ確認できます。

## condaとPyPIを混ぜるときの注意点｜conda優先の解決順

Pixiはまずcondaの依存を解決し、その結果を前提にPyPIの依存を解決します。公式は理由を「PyPIのパッケージはインストール先のベース環境が必要だから」と説明し、その帰結として「両方で入手でき、両方に指定されている場合はcondaのパッケージを入れる」と書いています（[Conda & PyPI](https://pixi.prefix.dev/latest/concepts/conda%5Fpypi/)）。

実際に、condaでnumpyを入れた環境に`pixi add --pypi numpy`を足しても、`pixi.toml`の`[pypi-dependencies]`にnumpyが増えるだけで、ロックと環境にはcondaのnumpy 2.5.4が残りました。`pixi list`で見ると、numpyの取得元は`conda`、requestsは`pypi`です。

```
pixi list
# numpy     2.5.4  py312h66ee8b4_0  7.90 MiB    conda  https://conda.anaconda.org/conda-forge
# requests  2.34.2                  228.90 KiB  pypi   https://pypi.org/simple
```

ただし、PyPI側の版指定がまったく無視されるわけではありません。condaで決まった版はPyPIの解決で固定扱いになるため、両者が矛盾すると解決が止まります。[公式の例](https://pixi.prefix.dev/latest/concepts/conda%5Fpypi/#pinned-package-conflicts)では、conda側を`typing_extensions = "*"`（4.15.0に解決）、PyPI側を`typing_extensions = "==4.14"`にすると「failed to solve the pypi requirements」で失敗します。直接書いた依存でなくても、condaパッケージが引き込んだ依存とPyPIパッケージの要求がぶつかれば同じ失敗になります。

この順序から、実務では次の判断になります。

- **C拡張を持つ大物はcondaで入れる**：numpy・scipy・pytorch・gdalのように、ネイティブライブラリと版を合わせる必要があるものはconda側に置きます。
- **PyPIにしかないものだけ`--pypi`にする**：社内パッケージやconda-forgeに無いライブラリが対象です。同じパッケージを両方に書くとcondaの版が使われ、PyPI側の版指定と矛盾すれば解決が失敗します。
- **PyPI版の特定ビルドが必要なら、conda側から外す**：PyPIのwheelを使いたいときは、conda側の依存から消したうえで、そのパッケージを依存に持つcondaパッケージが無いか`pixi tree`で確認します。

## 複数の環境と複数OSへの対応｜featureとplatforms

### featureによるテスト用環境の分離

テストやドキュメント生成でしか使わないパッケージは、feature（機能単位の依存のまとまり）に入れ、環境として組み合わせます。

```
pixi add --feature test pytest
pixi workspace environment add test --feature test
pixi run -e test pytest --version
# pytest 9.1.1
```

`pixi.toml`には`[feature.test.dependencies]`と`[environments]`の表が増えます。注意したいのは、環境にまだ組み込まれていないfeatureへ`pixi add`すると、版が`pytest = "*"`のまま固定されない点です。0.81.0では実行時に「`pixi upgrade --feature test pytest`で解決して版を固定してください」という案内が出ました。環境を先に作ってから`pixi add`するか、案内どおり`upgrade`を実行してください。

### platformsによる他OS向けロックの生成

macOSで開発し、LinuxのCIとWindowsのメンバーでも同じ環境を使う場合は、対象のプラットフォームを足します。

```
pixi workspace platform add linux-64 win-64 osx-arm64
```

これで`pixi.lock`に4つのプラットフォーム分の解決結果が入ります。Intel Macで実行すると1.5秒ほどで終わり、キャッシュにはWindows向けのパッケージが1件も落ちていませんでした。他のOS向けのパッケージはロックに記録されるだけで、ダウンロードされるのはそのOSで`pixi install`したときです。Windowsだけ入れたいパッケージは`[target.win-64.dependencies]`の表に書き分けます。

## condaからの移行｜environment.ymlとpyproject.toml

### `pixi init --import`によるenvironment.ymlの取り込み

condaの`environment.yml`は、`pixi init --import environment.yml`で`pixi.toml`に変換できます。次のファイルを変換しました。

```
name: legacy-env
channels:
  - conda-forge
dependencies:
  - python=3.11
  - pandas
  - pip
  - pip:
    - rich
```

結果は、`name`がワークスペース名に、`pip:`の下が`[pypi-dependencies]`に入る形でした。版を書いていないパッケージは`"*"`になります。

```
[workspace]
channels = ["conda-forge"]
name = "legacy-env"
platforms = ["osx-64"]

[dependencies]
python = "3.11.*"
pandas = "*"
pip = "*"

[pypi-dependencies]
rich = "*"
```

Pixiの環境ではPyPIのパッケージをPixi自身が入れるので、`pip`を依存に残す必要は通常ありません。`channels`に`defaults`が入っている場合は、ライセンス条件を確認したうえでconda-forgeへ置き換えるかを決めてください。

### pyproject.tomlによるPixi設定の管理

Pythonパッケージとして配布するプロジェクトなら、`pixi init --format pyproject`で`pyproject.toml`に設定を書けます。PEP 621の`[project]`はそのまま残り、Pixi固有の設定は`[tool.pixi.workspace]`や`[tool.pixi.pypi-dependencies]`に入ります。生成直後の`[tool.pixi.pypi-dependencies]`には、プロジェクト自身を編集可能モードで入れる`pp = { path = ".", editable = true }`（`pp`はプロジェクト名）が書かれていました。

## プロジェクト外でツールを使う｜pixi global・pixi exec・スクリプト実行

`pixi global install`は、CLIツールをツールごとの専用環境に入れ、コマンドだけをPATHに出します。`pixi global install ruff`を実行すると、`~/.pixi/envs/ruff`に環境ができ、`~/.pixi/bin/ruff`から呼べるようになりました。入れたツールの一覧は`~/.pixi/manifests/pixi-global.toml`に書かれます。このファイルを別のマシンへ持っていき`pixi global sync`を実行すると、同じツール群を入れ直せます。

一度だけ使うなら`pixi exec`が向いています。一時環境を作って実行するだけで、プロジェクトのファイルは作りません。

```
pixi exec --spec python=3.13 python -c "import sys; print(sys.version.split()[0])"
# 3.13.16
```

単体のPythonスクリプトは、PEP 723のメタデータを書いて`pixi run --script`で実行できます。依存はスクリプトの先頭に書くので、`pixi.toml`は要りません。

```
# /// script
# requires-python = ">=3.11"
# dependencies = ["rich>=13.9.2"]
# ///
import rich, sys
rich.print(f"python {sys.version.split()[0]} [bold]ok[/bold]")
```

これを`hello.py`として`pixi run --script hello.py`を実行すると、作業ディレクトリに何も作らずに「python 3.15.0 ok」と表示されました。初回の実行で`requires-python`を満たす版が解決され、[公式の説明](https://pixi.prefix.dev/latest/python/scripts/)どおり、以後はメタデータを満たす限りその解決結果が再利用されます。新しい版へ更新するときは`pixi update --script hello.py`を実行し、版を固定したいときは`requires-python`を狭く書きます。0.81.0では、URL（GitHub Gistを含む）を直接渡して実行することもできるようになっています。

## よくある質問

### pixi-packとは何ですか？

`pixi.lock`をもとに、環境のパッケージを1つの`.tar`にまとめるツールです。Pixi本体ではなくQuantCoが[GitHubのQuantco/pixi-pack](https://github.com/Quantco/pixi-pack)で公開しています（BSD-3-Clause・2026年10月時点の最新は0.7.11）。受け取った側は`pixi-unpack environment.tar`で環境を再現します。元の環境がなくてもロックファイルからパックを作れる点がconda-packとの違いで、`linux-64`のマシンで`win-64`向けのパックを作ることもできます。

### Pixiの設定ファイルはpixi.yamlですか？

いいえ、`pixi.toml`です。TOML形式で、`pyproject.toml`の`[tool.pixi]`の表に書くこともできます。ロックファイルの`pixi.lock`はYAML形式なので、取り違えないようにしてください。

### PixiとuvはPythonの開発でどちらを使うべきですか？

依存がPyPIだけで完結するならuv、ネイティブライブラリを伴うパッケージをconda-forgeから入れたい場合やPython以外の言語も管理したい場合はPixiです。PixiはPyPIの解決にuvをライブラリとして使っているので、PyPI側の解決の仕組みは同じです。

### PixiでPythonのバージョンを指定・変更できますか？

できます。`pixi add python=3.12`で指定し、変えるときは`pixi add python=3.13`のように指定し直します。プロジェクト全体の版を上げずに一度だけ別の版で動かすなら、`pixi exec --spec python=3.13 python`を使います。

### conda activateのように環境を有効化するには？

`pixi shell`で環境に入ります。`pixi run`を使えば有効化せずにコマンドを実行できるので、普段は有効化しない使い方が基本です。Bash・Zshの起動時やCIで有効化したい場合は`eval "$(pixi shell-hook)"`、PowerShellでは`(pixi shell-hook) | Out-String | Invoke-Expression`を使います。

## 関連記事

- [uvとは？Pythonの環境構築・パッケージ管理・バージョン管理の使い方を徹底解説](/tech/details/4384/)
- [pipとcondaの違いと使い分け｜Anaconda・Miniconda・商用ライセンスまで解説](/tech/details/7775/)
- [Poetryとは？Python依存管理の仕組みと2.5系の使い方・uvとの選び方](/tech/details/12303/)
- [miseとは？mise.tomlでツール・環境変数・タスクを束ねる導入手順【2026年版】](/tech/details/17621/)
- [Devboxとは？Nixを使う開発環境構築ツールの仕組み・インストール・使い方【2026年版】](/tech/details/8323/)

---

出典: [Pixiとは？Python・conda対応のパッケージ管理ツールの使い方とuv・condaとの違い](<https://www.issoh.co.jp/tech/details/9892/>)（株式会社一創）
