Что это такое
pyenv — менеджер версий Python. Он позволяет переключать глобальную, локальную и проектную версию языка без тяжелой платформы вокруг разработки.
Проект был форкнут из идей rbenv и ruby-build, а затем адаптирован под Python и его особенности сборки.
Главная задача pyenv — дать разработчику простой способ держать несколько версий Python на одной машине и выбирать нужную для проекта.
Как устроен проект
Внутри проекта — shell-скрипты, логика shim, установка версий, правила поиска локальной версии и инструкции по настройке разных оболочек.
pyenv не пытается управлять пакетами внутри проекта. Для зависимостей обычно используют venv, pip, Poetry, uv или другие инструменты.
Как это используют
Обычный сценарий: установить нужный Python, записать локальную версию в проект и получить одинаковое поведение команд `python` и `pip` у всех участников.
Для библиотек pyenv полезен при проверке совместимости: можно быстро прогнать тесты на нескольких версиях Python без перестановки системного интерпретатора.
Практический пример
Локальная версия Python для проекта
Пример показывает базовый сценарий pyenv: установить нужный Python и закрепить его в конкретной папке проекта.
pyenv install 3.12.4
cd my-project
pyenv local 3.12.4
python --version
Сильная сторона проекта — простота Unix-подхода. Инструмент делает одну задачу и хорошо сочетается с другими частями Python-экосистемы.
Сильные стороны
Еще одно преимущество — локальные файлы версии. Они помогают репозиторию явно сообщать, какой Python ожидается при разработке.
Ограничение в том, что pyenv зависит от системных библиотек для сборки Python. На разных ОС установка может потребовать отдельных пакетов.
Ограничения
Также важно не путать версию языка и окружение зависимостей: pyenv выбирает Python, но не решает изоляцию пакетов автоматически.
pyenv лучше всего подходит разработчикам, которые ведут несколько Python-проектов и не хотят ломать системную установку языка.
Кому подойдет
Для контейнеров и серверов он не всегда нужен: там версия Python часто задается образом или пакетным менеджером окружения.
В каталоге pyenv важен как маленький, но очень практичный инструмент: он снижает трение вокруг версий языка, не навязывая новый процесс.
Хорошая практика — фиксировать версию в проекте и описывать установку коротко, чтобы новый участник не угадывал, почему тесты падают только у него.
pyenv особенно хорошо работает как часть простого соглашения проекта. Если в репозитории зафиксирована версия Python, новый участник не тратит полдня на догадки, почему локально не собираются зависимости. Инструмент не делает среду магической, но убирает один частый источник хаоса: случайное совпадение системного Python, пакетного менеджера и ожиданий проекта.
В повседневной работе pyenv особенно полезен после нескольких месяцев жизни проекта. Когда старый сервис, новая библиотека и экспериментальная ветка требуют разные версии Python, переключение одной командой экономит время и снижает риск случайно сломать системную установку.