Какова связь между виртуальными и пиенвскими?

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

Ответ 1

Pyenv и virtualenv - это очень разные инструменты, которые по-разному работают разными способами:

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

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

venv python > 3.3

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

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

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

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

Ответ 2

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

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

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

Короче:

  • virtualenv позволяет создавать локальный, независимый python установки путем клонирования из существующих.
  • pyenv позволяет вам устанавливать разные версии python одновременно (либо общесистемной или только для локального пользователя), а затем выберите, какой из множество питонов для запуска в любой момент времени (в том числе созданный virtualenv или Anaconda)