【Python】Pixiの環境(environment)
Pixi に於ける環境の基本
PS C:\⋯\sample> pip --version
pip 25.1.1 from C:\Users\⋯\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pip (python 3.13)
PS C:\⋯\sample> pixi run pip --version
pip 25.2 from C:\⋯\sample\.pixi\envs\default\Lib\site-packages\pip (python 3.13)
しかし
複数の環境
まずは
pixi init environments
environmentsというフォルダーの中に、pixi.tomlというファイルがあるだろう。環境にまつわる内容は、このファイルに記載していく。
本記事で扱う内容
本記事では、次のpixi.tomlを使う。これらの意味は、実行の結果を見ればすぐに分かるだろう。
なおplatforms = ["win-64"]とあるが、
[workspace]
channels = ["conda-forge"]
name = "environments"
platforms = ["win-64"] # OSによって異なる
version = "0.1.0"
[tasks]
show_version = "python --version"
[environments]
default = { features = ["py313"] }
py312 = { features = ["py312"] }
py311 = { features = ["py311"] }
py310 = { features = ["py310"], solve-group = "group310", no-default-feature = true }
test310 = { features = ["test310", "py310"], solve-group = "group310", no-default-feature = true }
[feature.py313]
dependencies = { python = "~=3.13.0" }
# tasks = { show_version = "python --version" }
[feature.py312]
dependencies = { python = "~=3.12.0" }
# tasks = { show_version = "python --version" }
[feature.py311]
dependencies = { python = "~=3.11.0" }
# tasks = { show_version = "python --version" }
[feature.py310]
dependencies = { python = "~=3.10.0" }
tasks = { _show_version = "python --version" }
[feature.test310]
tasks = { print_version = "python -c \"import sys; print(sys.version)\"" }
環境について表にまとめると斯様になる。後述するように、no-default-feature = trueとしない環境には、暗黙の内にdefaultという
|
|
||
|---|---|---|
default |
py313default
|
|
py312 |
py312default
|
|
py311 |
py311default
|
|
py310 |
py310 |
group310 |
test310 |
test310py310
|
group310 |
1. 環境の使い分け
今、pixi.tomlにてshow_versionというタスクを定めている。これは、単に
[tasks]
show_version = "python --version"
default、py312、py311の各環境を用いてこのタスクを実行してみよう。オプション-eは--environmentと同じく、使用する環境を示す。
PS C:\⋯\environments> pixi run -e default show_version
Pixi task (show_version in default): python --version
Python 3.13.7
PS C:\⋯\environments> pixi run -e py312 show_version
Pixi task (show_version in py312): python --version
Python 3.12.11
PS C:\⋯\environments> pixi run -e py311 show_version
Pixi task (show_version in py311): python --version
Python 3.11.13
同名のshow_versionというタスクであるが、その結果は環境によって異なることが確かめられた。
ところで、このような状態を曖昧(-eを付けない場合、次のように表示される。
PS C:\⋯\environments> pixi run show_version
? The task 'show_version' can be run in multiple environments.
Please select an environment to run the task in: ›
❯ default
py312
py311
これを見れば、選択肢にpy310がない。つまり、環境py310ではタスクshow_versionが使えないことを意味する。
2. no-default-featureによる独立
環境py310は「no-default-feature = trueと定めているため」、タスクshow_versionは使えない。
PS C:\⋯\environments> pixi run -e py310 show_version
show_version: command not found
default:暗黙の帰属
show_versionはpixi.tomlにて次のように定めている。
[tasks]
show_version = "python --version"
このように定められたものは、「defaultという
defaultからの離脱
通常、全ての環境は「暗黙の内にdefaultという[tasks]などと定めたものが憑き纏うようになっている。この依存関係から離脱し、真に独立した環境を作る場合、no-default-feature = trueとするのである。
py310 = { features = ["py310"], solve-group = "group310", no-default-feature = true }
feature の明記
defaultとは異なる
[feature.py310]
dependencies = { python = "~=3.10.0" }
tasks = { _show_version = "python --version" }
先の通り環境py310には、このpy310を付している。これにより、タスク_show_versionが使えるようになる。
PS C:\⋯\environments> pixi run -e py310 _show_version
Pixi task (_show_version in py310): python --version
Python 3.10.18
3. グループによる依存関係の同時解決
グループを使うと、複数の環境が同時に依存関係を解決し、バージョンの一致が保証されるという。公式には、「本番環境とテスト環境」といった使い方を想定しているようであった。
PS C:\⋯\environments> pixi run -e py310 _show_version
Pixi task (_show_version in py310): python --version
Python 3.10.18
PS C:\⋯\environments> pixi run print_version
Pixi task (print_version in test310): python -c "import sys; print(sys.version)"
3.10.18 | packaged by conda-forge | (main, Jun 4 2025, 14:42:04) [MSC v.1943 64 bit (AMD64)]
参考元
Discussion