Почему я должен использовать бродягу, если я использую virtualenv?

Я прочитал этот вопрос Нужно ли использовать virtualenv с Vagrant?, но я хотел бы знать обратное.

Я программирую и развертываю в средах UNIX/Linux (соответственно MAC OSX и Ubuntu), и я использую virtualenv, чтобы изолировать среды.

На самом деле я никогда не сталкивался с какими-либо проблемами, но я видел некоторых людей и множество учебников, которые предлагают использовать их вместе, и мне было интересно, следует ли и почему я должен использовать бродягу, может кто-нибудь объяснить это мне?

Ответ 1

Разница между virtualenv и Vagrant заключается в том, что virtualenv - это только отдельные установки Python, в то время как Vagrant - это вся машина.

  • virtualenv изолирует интерпретатор Python и зависимости Python от одной машины, поэтому вы можете устанавливать несколько проектов Python рядом друг с другом со своими зависимостями. Но для остальной части машины virtualenv ничего не делает: у вас все еще есть глобальные зависимости/пакеты, которые устанавливаются с помощью менеджера пакетов Mac OS X/Linux, и они разделяются между virtualenvs.

  • Vagrant указывает всю машину: он позволяет указать дистрибутив Linux, устанавливаемые пакеты и действия, которые необходимо предпринять для установки проекта. Поэтому, если вы хотите запустить коробку Vagrant с несколькими проектами Python на этом компьютере, вы все равно будете использовать virtualenv, чтобы поддерживать зависимости Python.

Например, разработчик в Mac OS X и разработчик на Ubuntu Linux могут использовать virtualenv для сохранения своих проектов Python, но им нужно будет использовать Vagrant для локального запуска той же машины (например, дистрибутив Linux, который соответствует развернутый сервер) для запуска точно такой же версии Linux с теми же пакетами, установленными на нем, и с теми же установками проекта Python.

Итак, чтобы ответить на ваш вопрос, причиной использования Vagrant является то, что он позволяет локально создавать машину с установленными точными пакетами, тогда как virtualenv будет касаться только зависимостей Python.