Поскольку все новые скрипты я теперь пишу на Python , а опыт использования этого языка у меня довольно скромный, время от времени я узнаю занятные вещи, которые многим другим программистам и так давно известны. Так, например, недавно я научился пользоваться virtualenv и virtualenvwrapper. И на случай, если я вдруг подзабуду, как это делается, решил вот написать эту небольшую шпаргалку.
Примечание: Даже если вы не особо интересуетесь программированием на Python, вы можете столкнуться с необходимостью использования сторонних проектов, написанных на этом языке. Взять к примеру тот же Graphite . Поэтому знание того, как в мире Python принято работать с зависимостями, мало кому повредит.
Какую проблему решает virtualenv? По умолчанию pip устанавливает пакеты как бы глобально. Большую часть времени это работает нормально, особенно если пишите вы небольшие скрипты, не имеющие огромного количества зависимостей. Но если у вас в несколько больших проектов, в которых используется что-то тяжелое и ломающее обратную совместимость между релизами (мне пока что удавалось избегать подобных проблем, но не удивлюсь, если этим грешит, скажем, Django) такое поведение становится проблемой.
Так вот, virtualenv — это инструмент, позволяющий создавать виртуальные окружения с пакетами. Разные «песочницы» (согласитесь, напоминает sandbox’ы в Cabal ) имеют разный набор пакетов разных версий. Работая над конкретным проектом, вы просто переключаетесь на подходящую песочницу, и проблема уходит. Заметьте, что в отличие от того, как это сделано в некоторых других языках программирования, одну и ту же песочницу можно смело использовать сразу в нескольких проектах. Плюс к этому уходит проблема засорения системы ненужными пакетами, так как песочницы можно легко создавать и удалять. Как я это вижу, программируя на Python в третьем тысячелетии, вообще все нужно делать через virtualenv!
Установка virtualenv и virtualenvwrapper, предоставляющего чуть более удобный интерфейс к virtualenv:
В ~/.bashrc дописываем:
source / usr / bin / virtualenvwrapper.sh
Создаем новое окружение:
Смотрим список окружений:
Меняем окружение:
Выходим из окружения:
Удаляем окружение:
Находясь в одном из окружений, можно ставить пакеты через pip, как обычно:
Список зависимостей проекта, насколько я смог разобраться, принято сохранять в файл с именем requirements.txt:
Этот подход позволяет одной командой установить все зависимости, необходимые проекту:
Как видите, все довольно просто.
Со временем статья может немного потерять актуальность. За самой свежей информацией обращайтесь к официальной документации по virtualenv и virtualenvwrapper .