Какова связь между виртуальными и пиенвскими?
Недавно я узнал, как использовать 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)