Який взаємозв'язок між virtualenv та pyenv?


175

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


3
fgimian.github.io/blog/2014/04/20/… : Однак існує й інша альтернатива під назвою pyenv, яка має ряд істотних переваг .
Martijn Pieters

11
Не будьте схожими на мене і pyenvплутайтесьpyvenv
Користувач

Відповіді:


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/pathналаштуванням, і заповнить його відповідним чином. Взагалі це дуже схоже на використання VirtualEnv.

Додаткові інструменти

Існує ряд інструментів, які варто згадати та розглянути, оскільки вони можуть допомогти у використанні одного або декількох з перерахованих вище:

  • VirtualEnvWrapper Управління та спрощення використання та управління VirtualEnv - крос-платформи .
  • pyenv-virtualenv , встановлений pyenv-installer , який надає PyEnv інструменти для управління та взаємодії з VirtualEnv - при цьому ви можете мати базову установку, що включає більше однієї версії python та створювати ізольовані середовища в кожній з них - Linux / OS- X . Запропонував Йоганн Візагі
  • PyInstaller може взяти ваш код python, можливо, розроблений та протестований під VirtualEnv, і зв’язати його так, щоб він міг запускати одну платформу, на якій не встановлена ваша версія python. -) машина для збирання встановлень 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: Від python 3.3 далі venv є частиною стандартної бібліотеки, і її слід використовувати замість virtualenv, оскільки її часто описують як "virtualenv зроблено правильно" - reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv
Стів Барнс

2
pyenv-virtualenv не є (або принаймні більше не є) лише Linux. Для цього є легкий пакунок для домашньої версії для MacOS.
Turn

Дякуємо, що підкреслили сумісність!
HashRocketSyntax

16

virtualenvдозволяє створити власну установку Python, наприклад, у підкаталозі проекту. Кожен з ваших проектів може мати власні python(або навіть декілька) своїх відповідних віртуалів. Для деяких / всіх virtualenvs цілком чудово навіть мати одну і ту ж версію python(наприклад, 2.7.16) без конфлікту - вони живуть окремо і не знають один одного. Якщо ви хочете використовувати будь-який з цих pythons, вам доведеться activateце (запустивши скрипт, який тимчасово змінить ваш, PATHщоб переконатися, що цей bin/каталог virtualenv стає першим). З цього моменту виклик python(або pipін.) Буде викликати версію цього virtualenv до тих пір, поки ви deactivateїї не відновите PATH.

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

Щоб створити virtualenv з певною версією Python, вам потрібно мати цю версію десь у вашій системі (чи є вона PATHчи ні) і по суті клонувати її у ваш щойно створений virtualenv. Звичайно, один із способів отримати певну версію - це встановити її через pyenv. Після цього окремі віртуоли можуть вільно розходитися, встановивши в них різні модулі (або їх версії).

Коротко:

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