Open12

pixiでPythonの環境構築をする

ryhararyhara

install

curl -fsSL https://pixi.sh/install.sh | bash
~/.bashrc
eval "$(pixi completion --shell bash)"

update

pixi self-update

uninstall

rm ~/.pixi/bin/pixi
ryhararyhara

pyproject.tomlで管理する

https://pixi.sh/latest/tutorials/python/

pixi init pixi-py --format pyproject
pixi-py
├── pyproject.toml
└── src
    └── pixi_py
        └── __init__.py

pixi.toml

pixi.tomlで管理したほうがシンプルそうだと思ったので,以下はpixi.toml前提で進める

example
[project]
channels = ["conda-forge"]
name = "workspace"
platforms = ["linux-64"]
version = "0.1.0"

[tasks]

[dependencies]
python = "==3.7"
loguru = ">=0.6.0,<0.7"
setuptools = ">=69.0.3,<70"
omegaconf = ">=2.3.0,<3"
numpy = ">=1.21.6,<2"
ezc3d = ">=1.5.0,<2"
typing = ">=3.10.0.0,<4"
colour = ">=0.1.5,<0.2"
cudatoolkit = "10.2.*"
pip = ">=24.0,<25"
scipy = "==1.6.3"
scikit-learn = ">=1.0.2,<2"
trimesh = "==3.9.15"
cython = ">=0.29.32,<0.30"
matplotlib = ">=3.5.3,<4"

[pypi-dependencies]
opencv-python = ">=4.11.0.86, <5"
human-body-prior = { git = "git+https://github.com/nghorbani/human_body_prior.git", rev = "SOMA" }
body-visualizer = { git = "git+https://github.com/nghorbani/body_visualizer" }
configer = { git = "git+https://github.com/nghorbani/configer.git" }
aitviewer = ">=1.13.0, <2"

[system-requirements]
libc = { family = "glibc", version = "2.27" }
cuda = "10.2"
ryhararyhara

pixi コマンド

pixi shell-hook

環境変数をprintする

export PATH="/workspace/.pixi/envs/default/bin:/root/.pixi/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
export CONDA_PREFIX="/workspace/.pixi/envs/default"
export PIXI_PROJECT_ROOT="/workspace"
export PIXI_PROJECT_VERSION="0.1.0"
export PIXI_IN_SHELL="1"
export PIXI_EXE="/usr/local/bin/pixi"
export PIXI_PROJECT_NAME="workspace"
export PIXI_PROJECT_MANIFEST="/workspace/pixi.toml"
export CONDA_DEFAULT_ENV="workspace"
export PIXI_ENVIRONMENT_NAME="default"
export PIXI_ENVIRONMENT_PLATFORMS="linux-64"
export PIXI_PROMPT="(workspace) "
. "/workspace/.pixi/envs/default/etc/conda/activate.d/libxml2_activate.sh"

# shellcheck shell=bash
pixi() {
    local first_arg="$1"
    local cmd="$PIXI_EXE $*"

    eval "$cmd"

    case "$first_arg" in
        add|a|remove|rm|install|i)
            eval "$($PIXI_EXE shell-hook --change-ps1 false)"
            hash -r
            ;;
    esac
}

export PS1="(workspace) ${PS1:-}"

環境変数に関して詳しくは以下を見ると良さそう

こんな感じで追加できる?

[activation.env]
# Python users often set:
PYTHONIOENCODING = "utf-8"
PYTHONNOUSERSITE = "1"
# R users often set:
PIXI_R_LIBS = "$CONDA_PREFIX/lib/R/library"
R_LIBS = "$PIXI_R_LIBS"
R_LIBS_USER = "$PIXI_R_LIBS"

pixi shell

仮想環境をactivateする.. .venv/bin/activateと同じ効果.

pixi run

仮想環境内でコマンドを実行する

pixi run python XXX.py

cache

ここに残る
Linux: $XDG_CACHE_HOME/rattler or $HOME/.cache/rattler

ryhararyhara

pixi add

https://pixi.sh/latest/reference/cli/#add

  • --pypi
    • PyPIからinstall
    • version指定のparseのされ方はPEP0508に従う
  • --git
    • gitのリポジトリからinstall
    • --branch <BRANCH>
    • --tag <TAG>
    • --rev <REV>
    • --subdir <SUBDIR>
install from conda
pixi add numpy 
pixi add numpy pandas "pytorch>=1.8" 
pixi add "numpy>=1.22,<1.24" 
install from git
pixi add --git https://github.com/wolfv/pixi-build-examples boost-check 
pixi add --git https://github.com/wolfv/pixi-build-examples --branch main --subdir boost-check boost-check
install from pypi
pixi add --pypi Django==5.1rc1 
pixi add --pypi "boltons>=24.0.0" --feature lint 
pixi add --pypi "boltons @ https://files.pythonhosted.org/packages/46/35/e50d4a115f93e2a3fbf52438435bb2efcf14c11d4fcd6bdcd77a6fc399c9/boltons-24.0.0-py3-none-any.whl" 
pixi add --pypi "exchangelib @ git+https://github.com/ecederstrand/exchangelib" 
pixi add --pypi "project @ file:///absolute/path/to/project" 
pixi add --pypi "project@file:///absolute/path/to/project" --editable 
pixi add --git https://github.com/mahmoud/boltons.git boltons --pypi 
pixi add --git https://github.com/mahmoud/boltons.git boltons --branch main --pypi 
pixi add --git https://github.com/mahmoud/boltons.git boltons --rev e50d4a1 --pypi 
pixi add --git https://github.com/mahmoud/boltons.git boltons --tag v0.1.0 --pypi 
pixi add --git https://github.com/mahmoud/boltons.git boltons --tag v0.1.0 --pypi --subdir boltons 
ryhararyhara

pixi task

https://pixi.sh/dev/workspace/advanced_tasks/

pixi task add

コマンドを追加

pixi task add chmpy  "python3 -m pip install --upgrade pip setuptools wheel && python3 -m pip in
stall 'git+https://github.com/mattloper/chumpy'"

pixi run command

以下で実行

pixi run command

pixi task alias

pixi task remove

pixi task list

ryhararyhara

pixi list

  • [REGEX]: 正規表現で一致するパッケージのみを表示
  • --json: json形式
  • --json-pretty: キレイなjson形式
  • --sort-by <SORT_BY>: <SORT_BY>=[default: name] [size, name, type]
pixi list [REGEX]

pixi tree

pixi tree <package>
ryhararyhara

pixi global

pixi global edit

defaultはnanoだが以下のように設定できる

pixi global edit code
pixi global edit vim

pixi global install

pixi global install ruff
ryhararyhara

anacondaのenvironment.ymlから環境を作成する

pixi init --import environment.yml