Недавно я узнал, как использовать virtualenv и virtualenvwrapper в моем рабочем процессе, но я видел pyenv, упомянутый в нескольких руководствах, но я не могу понять, что такое pyenv и чем он отличается / похож на virtualenv. Является ли pyenv лучшей / более новой заменой для virtualenv или дополнительным инструментом? Если последнее, что он делает по-другому и как оба (и virtualenvwrapper, если применимо) работают вместе?
python
virtualenv
virtualenvwrapper
pyenv
truth1ness
источник
источник
pyenv
путать сpyvenv
Ответы:
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/path
configure, и заполнит его соответствующим образом. В целом это очень похоже на использование VirtualEnv.Дополнительные инструменты
Существует ряд инструментов, о которых стоит упомянуть и которые следует рассмотреть, поскольку они могут помочь в использовании одного или нескольких из перечисленных выше:
источник
venv
теперь в стандартной библиотеке?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)источник