`pyenv-virtualenv` - Ваш швейцарский нож для Python-окружений

29 Apr, 2026
6,736
🔱 430
👥 69

Знакомая ситуация? Вы работаете над несколькими Python-проектами одновременно. Один требует Python 3.8, другой — 3.10, а третий и вовсе застрял на 2.7. И каждый проект, конечно же, хочет свои уникальные версии библиотек. Без правильного подхода к управлению окружениями, ваш компьютер быстро превращается в хаотичную свалку зависимостей, где одно ломает другое.

Именно здесь на сцену выходит pyenv — незаменимый инструмент для любого Python-разработчика, позволяющий легко переключаться между разными версиями Python. Но что делать с виртуальными окружениями? Ведь pyenv сам по себе их не создает и не управляет ими. Вот тут-то и приходит на помощь наш сегодняшний герой — плагин pyenv-virtualenv.

Что это за зверь и зачем он нужен?

Представьте, что pyenv — это ваш личный менеджер версий Python, который умеет устанавливать и переключать глобальные версии. А pyenv-virtualenv — это его верный помощник, который добавляет суперсилу по управлению виртуальными окружениями (virtualenv, venv, conda env) прямо из командной строки pyenv.

По сути, pyenv-virtualenv интегрирует функциональность создания и управления изолированными Python-окружениями прямо в привычный интерфейс pyenv. Это означает, что вы можете не только быстро переключаться между Python 3.8 и 3.10, но и для каждого проекта иметь свое, идеально чистое окружение со всеми необходимыми зависимостями, не боясь конфликтов.

Join the chat at https://gitter.im/yyuu/pyenv-virtualenv Build Status

Реклама

Суперсилы pyenv-virtualenv: Главные фичи

Давайте посмотрим, что делает pyenv-virtualenv таким удобным и мощным инструментом.

1. Создание окружений одним движением

Забудьте о длинных командах virtualenv --python=/path/to/python. С pyenv-virtualenv создание нового изолированного окружения становится интуитивно понятным:

pyenv virtualenv 3.9.10 my-project-env

Эта команда создаст виртуальное окружение my-project-env на базе Python 3.9.10. Если вы уже установили Python 3.9.10 через pyenv, то плагин сам найдет нужную версию. А если у вас уже выбрана локальная версия Python, можно создать окружение на её основе, просто указав имя:

pyenv virtualenv venv34

Кстати, pyenv-virtualenv умеет передавать любые опции базовым инструментам (virtualenv, venv или conda), что дает вам полный контроль над процессом.

2. Умная активация и деактивация

Одна из самых крутых фич — это автоматическая активация и деактивация виртуальных окружений. Если вы добавили eval "$(pyenv virtualenv-init -)" в свой конфиг шелла (а это очень полезно!), то pyenv-virtualenv будет сам активировать нужное окружение, когда вы заходите в директорию с файлом .python-version, содержащим имя вашего виртуального окружения.

Представьте: вы переходите в папку проекта, и ваше окружение уже активировано! Выходите из неё — окружение деактивируется. Никаких ручных source bin/activate. Красота!

Конечно, ручное управление тоже никуда не делось:

pyenv activate my-project-env
pyenv deactivate

3. Полный контроль над окружениями

Вам нужно увидеть, какие окружения у вас есть? Пожалуйста:

pyenv virtualenvs

Эта команда покажет список всех ваших виртуальных и conda-окружений, созданных через pyenv-virtualenv. А если какое-то окружение больше не нужно, его легко удалить:

pyenv uninstall my-project-env
# или
pyenv virtualenv-delete my-project-env

Все чисто и аккуратно.

4. Дружба с venv и conda

pyenv-virtualenv не заставляет вас выбирать между virtualenv и встроенным в Python 3.3+ модулем venv. Он достаточно умён, чтобы использовать python -m venv, если virtualenv не установлен.

Более того, если вы работаете с научными вычислениями или анализом данных, где часто используется conda, то pyenv-virtualenv прекрасно интегрируется и с conda окружениями! Вы можете создавать их через conda create и затем активировать через pyenv activate. Это делает pyenv-virtualenv по-настоящему универсальным решением.

Как это работает под капотом?

pyenv-virtualenv — это плагин для pyenv. Он расширяет функциональность pyenv, добавляя новые команды, такие как pyenv virtualenv, pyenv virtualenvs, pyenv activate и pyenv deactivate. Когда вы вызываете эти команды, плагин перенаправляет запросы к соответствующим инструментам (virtualenv, python -m venv или conda), но делает это таким образом, чтобы все окружения были зарегистрированы и управлялись в рамках экосистемы pyenv.

Это позволяет вам иметь единую точку управления для всех ваших Python-версий и их виртуальных окружений, что значительно упрощает рабочий процесс.

Примеры из жизни разработчика

  • Разработка нескольких проектов: У вас есть веб-проект на Django с Python 3.10 и старый скрипт на Flask с Python 3.8. Вы создаете два отдельных окружения: pyenv virtualenv 3.10 django-app и pyenv virtualenv 3.8 flask-script. Переходя в папки проектов, вы автоматически получаете нужную версию Python и все зависимости.
  • Тестирование библиотек: Вы разрабатываете свою Python-библиотеку и хотите убедиться, что она работает с Python 3.9, 3.10 и 3.11. С pyenv-virtualenv вы легко создаете по окружению для каждой версии и запускаете тесты.
  • Чистота рабочего пространства: Больше никаких глобальных установок pip install, которые могут конфликтовать между проектами. Каждое окружение — это чистый лист, который вы заполняете только нужными зависимостями.

Установка: Проще, чем кажется

Установить pyenv-virtualenv довольно просто. Если вы используете macOS и Homebrew, то это всего одна команда:

brew install pyenv-virtualenv

Для других UNIX-подобных систем (включая WSL, где, кстати, рекомендуется настроить Git для Unix-стиля окончаний строк) достаточно клонировать репозиторий в папку плагинов pyenv:

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

И не забудьте добавить eval "$(pyenv virtualenv-init -)" в ваш конфиг шелла (.bashrc, .zshrc или config.fish), чтобы включить автоактивацию. После этого перезапустите шелл, и вы готовы к работе!

Вердикт: Стоит ли брать?

Однозначно, да! Если вы Python-разработчик и ещё не используете pyenv для управления версиями Python, то самое время начать. А если уже используете, то pyenv-virtualenv — это маст-хэв плагин, который сделает вашу работу с виртуальными окружениями невероятно удобной и эффективной.

Он избавляет от рутины, предотвращает конфликты зависимостей и позволяет сосредоточиться на написании кода, а не на борьбе с окружением. Попробуйте, и вы удивитесь, насколько проще станет ваша Python-жизнь!

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.