🧚
Pixi — современный менеджер пакетов и проектов из мира Conda 🧚
Сегодня расскажу про
Pixi — более функциональный аналог uv из экосистемы Conda. Несмотря на то, что в Python проектах я использую только uv (и вам рекомендую), я также активно использую Pixi, но для других задач.
TL;DR• Сегодня в мире Conda нужно использовать Pixi, а не Conda/Mamba/Micromamba.
• Команда
pixi global служит sudo-free альтернативой apt на Linux с легким переносом глобального окружения между машинами.
• Команда
pixi exec служит для одноразовых запусков инструментов без их установки (в духе uvx).
Кратко о CondaConda — это инструмент для управления пакетами, зависимостями и виртуальными средами. Сильно упрощая, это как PyPI+pip+virtualenv в Python, но без привязки к конкретному языку. Conda пакеты устанавливаются из так называемых "каналов". Самый большой публичный канал называется conda-forge, и в нем есть все от консольных утилит (Git, uv, neovim, etc.) до Python и C++ библиотек.
Кратко о PixiСегодня при работе с экосистемой Conda нужно использовать Pixi, а не Conda/Mamba/Micromamba. Pixi оперирует теми же самыми базовыми сущностями (Conda среды, Conda каналы, Conda пакеты), но более надежно, воспроизводимо и удобно. Упрощая, Pixi в мире Conda — это как uv в мире Python, но с дополнительными возможностями.
Pixi как альтернатива apt на LinuxНа Linux я активно использую команду
pixi global как sudo-free альтернативу apt для установки глобальных инструментов: git, uv, python, и т.д. Например:
pixi global install python
python --version
Все установленные пакеты записываются в человекочитаемый файл, поэтому глобальные инструменты легко переносить между машинами, просто копируя этот файл:
cat $HOME/.pixi/manifests/pixi-global.toml
В теории это все применимо и к macOS, но я использую Homebrew.
Pixi для одноразовых запусков программ без их установкиЕще я использую команду
pixi exec для одноразовых запусков программ с любыми зависимостями без их установки. Скажем, запустить питон, никуда его не устанавливая:
pixi exec python --version
Или его конкретную версию с какими-то зависимостями:
pixi exec -s "python=3.14.3" -s numpy python -c "import numpy"
Под капотом Pixi просто создает временную Conda среду, устанавливает туда нужные зависимости, исполняет вашу команду, и удаляет среду.
Pixi для разработки Python проектовТакже Pixi можно использовать для разработки Python проектов. В отличие от Conda,
Pixi нативно поддерживает pyproject.toml и PyPI зависимости (особенности остаются, но ситуация гораздо лучше, чем с Conda). Как общий менеджер проектов Pixi умеет больше, чем uv:
• Можно использовать как task runner (замена make / just / etc.).
• Можно иметь несколько окружений сразу, например: prod, test и dev.
• Легче работать с зависимостями, содержащими C/C++/Rust/CUDA расширения.
• Воспроизводимость не только Python виртуальной среды, но и всех (CLI) инструментов, используемых в проекте.
• etc.
Но Python-specific функций у uv все же побольше.
Pixi для разработки не-Python проектовВ теории так тоже можно, особенно если проект содержит код на Python и, например, на C/C++. Я слышал про такие сценарии в областях типа Data Science или Robotics, но на практике не сталкивался.
Ограничения• В более популярных экосистемах (PyPI, Homebrew) многие баги уже найдены очень большой аудиторией. В мире Conda аудитория тоже немаленькая, но иногда эти находки придется делать вам.
• В канале conda-forge много пакетов, но Python пакетов все же больше в PyPI, а общих инструментов все же больше в Homebrew.
• Проекты в канале conda-forge часто добавляются и поддерживаются энтузиастами, а не оригинальными авторами проектов. Наверное, говорю это из соображений security.
Полезные ссылки•
Экосистема Conda
•
Переход с Conda на Pixi•
Поддержка PyPI пакетов•
Поддержка pyproject.toml