Какие альтернативы пакетному менеджеру pip существуют
Что проверяют
Различаете ли вы установщик пакетов, менеджер окружений и инструмент с lock-файлом, или все они для вас «замена pip». Следом обычно спрашивают, чем пользуетесь вы и как добиваетесь воспроизводимой сборки в CI и Docker.
Как отвечать
pip только ставит пакеты. Окружение создаёт venv, а точные версии фиксирует pip freeze или внешний инструмент. Альтернативы закрывают эти пробелы по-разному:
- uv: написан на Rust, ставит пакеты в разы быстрее pip и заменяет сразу несколько инструментов:
uv pip installкак совместимый интерфейс,uv lockиuv syncдля проекта сuv.lock,uv tool installвместо pipx,uv python installвместо pyenv; - Poetry: зависимости в
pyproject.toml, точные версии вpoetry.lock, сам создаёт окружение, собирает и публикует пакет. Вторая мажорная версия поддерживает стандартную секцию[project]; - PDM и Hatch: тоже работают от
pyproject.tomlи следуют стандартам PEP; - Pipenv:
PipfileиPipfile.lock, один из первых массовых инструментов с lock-файлом, сейчас его выбирают реже; - pip-tools:
pip-compileпревращаетrequirements.inв закреплённыйrequirements.txtс хешами, а pip остаётся установщиком; - conda и mamba: ставят не только Python-пакеты, но и бинарные зависимости вроде CUDA и BLAS, поэтому популярны в data science;
- pipx: не менеджер зависимостей проекта, а способ поставить CLI-утилиту в изолированное окружение.
Стоит упомянуть PEP 751 с общим форматом lock-файла pylock.toml: инструменты постепенно его поддерживают.
Где спотыкаются
Смешивают conda и pip в одном окружении без порядка. pip не видит решатель conda и может перезаписать его пакеты, поэтому сначала ставят всё возможное через conda, потом остальное через pip.
Коммитят requirements.txt без закреплённых версий и называют это воспроизводимостью. Через месяц такая сборка подтянет другие версии транзитивных зависимостей.
Переносят подход приложения на библиотеку. В библиотеке зависимости указывают диапазонами, а жёсткие версии из lock-файла пользователю не навязывают.