# Виртуальное окружение

Доводилось слышать о `virtualenv`? Если вы начинающий, то, вероятно, нет. Для опытного же разработчика это неотъемлемая часть инструментария.

Так что же такое `virtualenv`? `virtualenv` - это утилита для создания изолированных окружений в Python. Предположим - у нас есть приложение, которое требует версию 2 определенной библиотеки, однако, другое приложение требует версию 3. Как нам использовать и работать сразу с обоими?

Если вы установите всё необходимое в `/usr/lib/python2.7/site-packages` (путь может отличаться в зависимости от платформы и версии языка), то легко можете случайно обновить уже установленный пакет.

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

Что вы будете делать? Использовать `virtualenv`! Оно создаст изолированные окружения для ваших приложений и позволит устанавливать пакеты именно в эти окружения, а не глобально.

Для установки воспользуемся `pip`:

```bash
$ pip install virtualenv
```

Две основные команды:

* `$ virtualenv myproject`
* `$ source myproject/bin/activate`

Первая создаст новое изолированное окружение в папке `myproject`, а вторая активирует это окружение.

При создании виртуального окружения вам нужно принять решение. Хотите ли вы, чтобы виртуальное окружение использовало пакеты, установленные глобально, но по умолчанию у `virtualenv` нет к ним доступа.

Если вы хотите открыть `virtualenv` доступ к глобально установленным пакетам, то используйте флаг `--system-site-packages` во время создания окружения:

```bash
$ virtualenv --system-site-packages mycoolproject
```

Вы можете деактивировать виртуальное окружение, набрав:

```bash
$ deactivate
```

Команда `python` вновь будет использовать глобально установленный в системе интерпретатор Python после деактивации виртуального окружения.

## Бонус

Вы можете использовать `smartcd` - библиотеку для bash и zsh, с помощью которой автоматически активировать и деактивировать виртуальное окружение при использовании команды `cd`. Больше информации здесь: [GitHub](https://github.com/cxreg/smartcd)

Это было короткое введение в тему виртуальных окружений. Дополнительную информацию можно почерпнуть [здесь](http://docs.python-guide.org/en/latest/dev/virtualenvs/).
