Отличия pyenv, pyvenv и virtualenv

| Python

Начинающие разработчики Python часто задают вопросы связанных с этими терминами на разного рода QA сайтах. В большинстве случаев новички не понимают различий между этими программами для решения повседневных задач. Надеемся, что эта статья сможет прояснить этот вопрос и рассказать какие функции они выполняют.

pyenv

Вы когда-нибудь хотели проверить свой код на разных версиях Python? Или понадобилось установить более новую версию Python, не затрагивая существующую? Может быть, вы много слышали о PyPy и хотите установить его на свой компьютер?

Если вы задаётесь такими вопросами, то pyenv идеальный инструмент для решения таких задач. Он позволяет легко установить несколько копий и несколько вариантов интерпретатора Python. Таким образом, можно не только устанавливать разные версии CPython, но и PyPy, Jython, Stackless Python.

Программа является инструментом командной строки, которая легко подменяет глобальный интерпретатор python. Она также позволяет определять для каждого приложения свои версии python. Вы можете использовать команду local или прямо указать используемую версию python в файле с именем .python-version для текущего и вложенных каталогов.

Этот проект очень удобный, с ним с лёгкостью можно переключаться между Python 2 и 3 на своём локальном компьютере. Его также часто используют на серверах, чтобы быстро установить нужную версию Python.

pyvenv & virtualenv

pyvenv и virtualenv позволяют создавать виртуальные среды для изоляции зависимостей проекта. Когда они полезны? Например, есть старый проект использующий Django 1.6, а новые проекты хочется разрабатывать с версии 1.11. Когда производится установка одной версии Django, она подменяет собой другую. Виртуальная среда может выручить нас в такой ситуации. Цитата из официальной документации:

“Виртуальная среда (также называемая venv) - это среда Python, в которой интерпретатор, библиотеки и скрипты, установленные в ней, изолированы от других установленных виртуальных сред. По умолчанию любые библиотеки, установленные в «системный» Python являются частью операционной системы.”

Когда создаётся новая виртуальная среда, производится создание собственного локального интерпретатора с собственными библиотеками и сценариями. Поэтому, когда используется локальный интерпретатор, он загружает библиотеки из локальной среды. Если он не находит, то он пытается выполнить поиск библиотеки в родительской/системной среде.

Обратите внимание: эти инструменты не компилируют и не устанавливают новые интерпретаторы Python. Они просто создают «виртуальные среды» поверх уже установленных версий Python. Например, есть Python 3.5, установленный на компьютере и созданная виртуальной среда для этой версии. Тогда эта среда будет содержать локальную копию Python 3.5, за исключением того, что пути к среде будут указывать на разные местоположения. Это похоже на то, что мы копируем основной интерпретатор в новое место, а затем делаем другой путь для загрузки библиотек и пакетов.

virtualenv часто является самым популярным выбором для создания виртуальных сред. Он существует уже довольно долгое время и поддерживает версии Python с 2.6 до 3.5. Но он не входит в комплект поставки стандартного дистрибутива Python, поэтому его нужно установить из PyPi.

pyvenv поставляется с стандартным дистрибутивом Python начиная с версии 3.4. В стандартной библиотеке также есть модуль venv, который позволяет программно обращаться к его функциональности. За более подробной информацией обратитесь к официальной документации.

Резюме

pyenv – менеджер версий Python. Устанавливает различные версии и варианты интерпретаторов Python.

pyvenv – инструмент для создания изолированных виртуальных сред независящих от системного интерпретатора Python. Включен в Python начиная с версии 3.4.

virtualenv – создаёт виртуальные среды. Доступен в PyPi. Таким образом, pyvenv подобен virtualenv, а pyenv – это совершенно другой вид инструмента.