Какова связь между virtualenv и pyenv?


175

Недавно я узнал, как использовать virtualenv и virtualenvwrapper в моем рабочем процессе, но я видел pyenv, упомянутый в нескольких руководствах, но я не могу понять, что такое pyenv и чем он отличается / похож на virtualenv. Является ли pyenv лучшей / более новой заменой для virtualenv или дополнительным инструментом? Если последнее, что он делает по-другому и как оба (и virtualenvwrapper, если применимо) работают вместе?


3
fgimian.github.io/blog/2014/04/20/... : Тем не менее, есть еще одна альтернатива называется pyenv , который имеет ряд существенных преимуществ .
— Мартин Питерс

11
Не быть похожим на меня и получить pyenvпутать сpyvenv
— User

Ответы:


162

Pyenv и virtualenv - это очень разные инструменты, которые по-разному работают для разных вещей:

  • Pyenv - это расширение bash - не будет работать в Windows - которое перехватывает ваши вызовы python, pip и т. Д., Чтобы направить их в одну из нескольких системных цепочек инструментов python. Таким образом, у вас всегда есть все библиотеки, которые вы установили в выбранной версии Python - как таковой, он хорош для пользователей, которым приходится переключаться между различными версиями Python.

  • VirtualEnv - это чистый python, поэтому он работает везде, он создает копию, необязательно определенной версии, python и pip, локальную для среды активации, которая может включать или не включать ссылки на текущую цепочку инструментов системы, если это невозможно установить только известное подмножество библиотек в эту среду. Таким образом, это почти наверняка намного лучше для тестирования и развертывания, так как вы точно знаете , какие библиотеки, в каких версиях используются, и глобальные изменения не повлияют на ваш модуль.

Venv Python> 3,3

Обратите внимание, что начиная с Python 3.3 и далее существует встроенная реализация VirtualEnv, называемая venv (с, в некоторых установках, оболочкой, называемой pyvenv - эта оболочка устарела в Python 3.6 ), которая, вероятно, должна использоваться в предпочтении. Чтобы избежать возможных проблем с оберткой, часто рекомендуется использовать ее напрямую с помощью /path/to/python3 -m venv desired/env/pathили вы можете использовать отличный pyселектор python в Windows с py -3 -m venv desired/env/path. Он создаст каталог, указанный в desired/env/pathconfigure, и заполнит его соответствующим образом. В целом это очень похоже на использование VirtualEnv.

Дополнительные инструменты

Существует ряд инструментов, о которых стоит упомянуть и которые следует рассмотреть, поскольку они могут помочь в использовании одного или нескольких из перечисленных выше:

  • VirtualEnvWrapper Управление и упрощение использования и управления VirtualEnv - Cross Platform .
  • pyenv-virtualenv , установленный pyenv-installer , который предоставляет инструменты PyEnv для управления и взаимодействия с VirtualEnv - благодаря этому вы можете иметь базовую установку, включающую более одной версии python, и создавать изолированные среды в каждой из них - Linux / OS- X . Предложил Иоганн Визаги
  • PyInstaller может взять ваш код Python, возможно, разработанный и протестированный под VirtualEnv, и объединить его так, чтобы он мог работать на тех платформах, на которых не установлена версия Python. Обратите внимание, что это не кросс-компилятор, вам потребуется Windows (виртуальная). -) машина для сборки установок Windows и т. д., но это может быть удобно, даже если вы можете быть уверены, что Python будет установлен, но не можете быть уверены, что версия python и все библиотеки будут совместимы с вашим кодом.

3
Вероятно, стоит упомянуть pyenv-virtualenv, плагин pyenv, который позволяет pyenv и virtualenv беспрепятственно работать в унисон. Если вы установили pyenv с помощью pyenv-installer, pyenv-virtualenv уже будет присутствовать. * Github.com/yyuu/pyenv-virtualenv * github.com/yyuu/pyenv-installer
— wjv

1
Как насчет venvтеперь в стандартной библиотеке?
— Flimm

@Flimm: Начиная с python 3.3 и далее, venv является частью стандартной библиотеки и должен использоваться вместо virtualenv, поскольку его часто называют «virtualenv сделано правильно» - reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv
— Стив Барнс

2
pyenv-virtualenv не является (или, по крайней мере, больше не является) linux. Для этого есть пакет homebrew для простой установки на MacOS.
— Поворот

Спасибо, что подчеркнули совместимость!
— HashRocketSyntax

16

virtualenvпозволяет создавать пользовательские установки Python, например, в подкаталоге вашего проекта. Таким образом, каждый из ваших проектов может иметь свои собственные python(или даже несколько) под их соответствующим virtualenv. Для некоторых / всех virtualenv совершенно нормально иметь одну и ту же версию python(например, 2.7.16) без конфликтов - они живут отдельно и не знают друг друга. Если вы хотите использовать какой-либо из этих пунктов python, вы должны activateэто сделать (запустив скрипт, который временно изменит ваш файл, PATHчтобы убедиться, что bin/каталог virtualenv стоит первым). С этого момента вызов python(или pipт. Д.) Будет вызывать версию virtualenv до тех пор, пока вы deactivateее не восстановите PATH.

pyenvработает в более широком масштабе, чем virtualenv- он содержит регистр установок Python (и может использоваться для установки новых) и позволяет вам настроить, какую версию Python запускать при использовании pythonкоманды. Звучит похоже, но практическое использование немного другое. Он работает, добавляя свой pythonскрипт- шим к вашему PATH(навсегда), а затем решая, какой «реал» pythonвызывать. Вы даже можете настроить pyenv для вызова одного из ваших питонов virtualenv (используя pyenv-virtualenvплагин). Версии Python, которые вы устанавливаете с помощью, pyenvидут в его $(pyenv root)/versions/каталог (по умолчанию root для pyenv - ~ / .pyenv), поэтому они более «глобальны», чем virtualenv. Обычно вы не можете дублировать версии Python, установленные через pyenv, по крайней мере, это не главная идея.

Чтобы создать virtualenv с определенной версией Python, вам нужно иметь эту версию где-то в вашей системе (независимо от того, PATHвключена она или нет) и по существу клонировать ее в ваш недавно созданный virtualenv. Конечно, один из способов получить определенную версию - это установить ее через pyenv. Как только это будет сделано, отдельные virtualenv могут свободно расходиться, установив в них различные модули (или их версии).

Коротко:

  • virtualenv позволяет создавать локальные, независимые установки Python путем клонирования из существующих
  • pyenv позволяет устанавливать разные версии python одновременно (либо для всей системы, либо только для локального пользователя), а затем выбирать, какой из множества питонов запускаться в любой момент времени (включая те, которые созданы virtualenv или Anaconda)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.