Virtualenv и venv: Обяснени са виртуалните среди на Python

От всички причини, поради които Python е хит сред разработчиците, една от най-големите е неговата широка и постоянно разширяваща се селекция от пакети на трети страни. Удобните набори от инструменти за всичко, от поглъщането и форматирането на данни до високоскоростната математика и машинното обучение, са само importили pip installдалеч.

Но какво се случва, когато тези пакети не играят добре помежду си? Какво правите, когато различни проекти на Python се нуждаят от конкуриращи се или несъвместими версии на едни и същи добавки? Това е мястото, където виртуалните среди на Python влизат в игра.

Можете да създавате и работите с виртуална среда както в Python 2, така и в Python 3, въпреки че инструментите са различни. Virtualenv е избраният инструмент за Python 2, докато venv се справя със задачата в Python 3. 

Какво представляват виртуалните среди на Python?

Виртуалната среда е начин да има множество, паралелни екземпляри на интерпретатора на Python, всеки с различни набори от пакети и различни конфигурации. Всяка виртуална среда съдържа отделно копие на интерпретатора на Python, включително копия на неговите помощни програми.

Пакетите, инсталирани във всяка виртуална среда, се виждат само във тази виртуална среда, а не в друга. Дори големи, сложни пакети със зависими от платформата двоични файлове могат да бъдат свързани помежду си във виртуална среда.

Има няколко често срещани случая на употреба за виртуална среда:

  1. Разработвате множество проекти, които зависят от различни версии на едни и същи пакети, или имате проект, който трябва да бъде изолиран от определени пакети поради сблъсък на пространство от имена. Това е най-стандартният случай на употреба.
  2. Работите в среда на Python, където не можете да модифицирате директорията на сайтовите пакети. Това може да се дължи на това, че работите в силно контролирана среда, като управляван хостинг, или на сървър, където изборът на интерпретатор (или използваните пакети в него) не може да бъде променен поради производствени изисквания.
  3. Искате да експериментирате с конкретна комбинация от пакети при силно контролирани обстоятелства, например да тествате кръстосана съвместимост или обратна съвместимост.
  4. Искате да стартирате „базова“ версия на интерпретатора на Python в система без пакети на трети страни и да инсталирате само пакети на трети страни за всеки отделен проект, ако е необходимо.

Нищо не казва, че не можете просто да разопаковате библиотека на Python в подпапка на проект и да я използвате по този начин. По същия начин можете да изтеглите самостоятелно копие на интерпретатора на Python, да го разопаковате в папка и да го използвате, за да стартирате скриптове и пакети, посветени на него.

Но управлението на подобни калдъръмени проекти скоро става трудно. Той само изглежда по-лесно да се направи, че на първо време. Работата с пакети, които имат двоични компоненти или които разчитат на сложни зависимости на трети страни, може да бъде кошмар. Най-доброто дългосрочно решение е да се използват собствените механизми на Python за създаване и работа с виртуална среда.

Виртуални среди в Python 3

Virtualenv се оказа незаменим за безброй разработчици на Python, но не е част от стандартната библиотека на Python. Python 3 има вградени инструменти за виртуална среда, което прави целия процес доста прост.

Свързано видео: Как Python улеснява програмирането

Перфектен за ИТ, Python опростява много видове работа, от автоматизация на системата до работа в авангардни области като машинно обучение.

Създайте виртуалната среда

За да създадете виртуална среда в дадена директория, напишете:

python3 -m venv /path/to/directory

(Обърнете внимание, че можете просто да използвате  pythonвместо, python3ако системата ви разпознава pythonкато интерпретатор на Python 3 по подразбиране.)

Целият процес на настройка на виртуалната среда може да отнеме минута или две. Когато приключи, трябва да имате директория с няколко поддиректории в нея. Най-важният поддиректория е  binв Unix или  Scriptsв Windows, където ще намерите копието на интерпретатора на Python за виртуалната среда заедно с неговите помощни програми.

Имайте предвид, че тъй като всяка виртуална среда съдържа собствено копие на интерпретатора на Python, тя може да бъде доста голяма. Както за Windows, така и за Linux, виртуалната среда на Python 3.6 ще консумира около 23 MB дисково пространство.

Активирайте виртуалната среда

Преди да можете да използвате тази виртуална среда, трябва изрично да я активирате . Активирането прави виртуалната среда интерпретатор на Python по подразбиране за продължителността на сесията.

Ще трябва да използвате различен синтаксис за активиране на виртуалната среда в зависимост от това коя операционна система и командната обвивка използвате.

  • В Unix или MacOS, използвайки черупката на bash: source /path/to/venv/bin/activate
  • В Unix или MacOS, използвайки черупката csh: source /path/to/venv/bin/activate.csh
  • На Unix или MacOS, използвайки рибната обвивка: source /path/to/venv/bin/activate.fish
  • В Windows с помощта на командния ред:path\to\venv\Scripts\activate.bat
  • На Windows, използващ PowerShell: path\to\venv\Scripts\Activate.ps1

Имайте предвид, че активираната среда работи само за контекста, в който е била активирана . Например, ако стартирате два екземпляра на PowerShell, A и B и активирате виртуалната среда само в инстанция A, тази среда ще се прилага само за A. Тя няма да се прилага никъде другаде.

Конфигурирайте и използвайте виртуалната среда

След като активирате новата виртуална среда, можете да използвате мениджъра на пакети pip, за да добавяте и променяте пакети за нея. Ще намерите pip в Scriptsподдиректорията на виртуалната среда на Windows и в binподдиректорията на Unix OS.

Ако вече сте запознати с начина, по който работи pip, сте готови. Трябва да е точно така и във виртуална среда. Просто се уверете, че използвате екземпляра на pip, който управлява пакети за виртуалната среда в контекста, в който е бил активиран - например сесията на bash или сесията на Windows CLI / PowerShell. Ако искате да проверите дали използвате правилния пип и правилната виртуална среда, въведете pip -Vи проверете дали пътят, който показва, сочи към поддиректория на вашата виртуална среда.

За да използвате създадената от вас виртуална среда за изпълнение на Python скриптове, просто извикайте Python от командния ред в контекста, където сте го активирали.

Деактивиране на виртуалната среда

Когато приключите с използването на виртуалната среда, можете просто да прекратите сесията, където сте я използвали. Ако искате да продължите да работите в средата, но вместо това с интерпретатора на Python по подразбиране, въведете deactivateв подканата. Потребителите на Windows в командния ред трябва да стартират deactivate.batот Scriptsподдиректорията, но потребителите на Unix и потребителите на Windows, работещи с PowerShell, могат просто да въвеждат deactivateвъв всяка директория.

Премахване на виртуалната среда

Виртуалните среди са самостоятелни. Когато вече не се нуждаете от виртуалната среда, можете просто да изтриете нейната директория.

Виртуални среди в Python 2

С Python 2 виртуалните среди не са естествена характеристика на езика. Вместо това трябва да инсталирате библиотеки на трети страни, за да създавате и управлявате виртуална среда.

Най-популярният и широко използван от тези проекти е virtualenv, който се справя със създаването на структурата на директориите и копирането на необходимите файлове във виртуална среда. За да инсталирате virtualenv, просто използвайте pip install virtualenv. За да създадете директория за виртуална среда с нея, напишете virtualenv /path/to/directory. Активирането и деактивирането на виртуалната среда работи по същия начин, както при виртуалните среди в Python 3 (вижте по-горе).

Използване на виртуална среда с преносими компютри Jupyter

Ако използвате преносими компютри Jupyter (известни още като преносими компютри IPython) и вече имате инсталиран Jupyter в цялата система, създайте виртуалната си среда и я активирайте. След това от вашата директория за виртуална среда стартирайте, за pip install ipykernelда добавите необходимите компоненти за IPython. И накрая, изпълнете ipython kernel install —user —name=, където project_name е име, което искате да свържете с конкретния проект. Оттам трябва да можете да стартирате Jupyter и да преминете към ядрото на IPython, което сте инсталирали във виртуалната среда.