Найти в Дзене

Настройка виртуальных окружений Python.

Оглавление

Одна из глобальных проблем при разработке и выкатке на бой приложений - это работа с зависимостями и средами.

Вы любите Windows или Ubuntu, а приложения пишете под Debian или наоборот. Может быть вам необходимо использовать библиотеку конкретной версии. Чтобы приложение вело себя предсказуемо у вас на машине и на боевом сервере придумано большое количество инструментов по виртуализации / контейнеризации, но сегодня остановимся на виртуальных окружениях. Собрал небольшую памятку по установке и азам работы с ними.

UPD: У меня стоит Ubuntu, все указанное ниже проверялось на этой системе. Думаю с небольшими изменениями будет актуально для Linux систем.

организуем удобную среду с виртуальными окружениями
организуем удобную среду с виртуальными окружениями

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

Немного повторюсь, зачем нам виртуальные окружения?

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

Если чуть подлиннее: предположим у вас несколько проектов: два из них передовые, они постоянно рефакторятся и поддерживаются в актуальном состоянии, а третий "гадкий утенок", создается ощущение, что он уже был устаревшим еще до основания компании. Настала ваша очередь что-то в нем править, но версии библиотек на этом проекте и вашей машине не совпадают. На помощь приходит виртуальное окружение.

virtualenv + virtualenvwrapper установка

Внезапно, нам нужно 2 пакета.
Внезапно, нам нужно 2 пакета.

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

$ sudo pip install virtualenv virtualenvwrapper

Выглядит достаточно просто) Дальше необходимо дописать в .bashrc некоторые изменения для корректной работы.

Указываем путь к директории с виртуальными окружениями и директории с вашими проектами:

$ export WORKON_HOME=$HOME/.virtualenvs
$ export PROJECT_HOME=$HOME/Devel

Указываем путь к python интерпретатору, используемому по умолчанию и к окружениям:

$ export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
$ export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv

Выполняем команды, указанные в virtualenvwrapper.sh:

source ~/.local/bin/virtualenvwrapper.sh

Сохраняем .bashrc и перезагружаем терминальную сессию.

Если возникли какие-то проблемы при запуске - уточните, что вы правильно указали путь к Python и virtualenv. Расположение можно уточнить с помощью команды `$ which virtualenv`.

Как с этим работать?

Создать новое окружение:

$ mkvirtualenv new_env

можно дополнительно указать необходимую версию Python из установленных в системе через параметр --python=python3.8

Выходим из окружения:

$ deactivate

Удаляем окружение:

$ rmvirtualenv new_env

Создать новый проект (нужно, чтобы присутствовала директория, указанная в PROJECT_HOME). При введении этой команды создастся директория под ваш проект и при активации окружения вас будет переносить в директорию проекта:

$ mkproject some_project_name

Копировать виртуальное окружение. Может быть полезно, если у вас есть набор повторяющихся библиотек и не часто меняется версия Python. Например есть желание, чтобы всегда был предустановленный flake8:

$ cpvirtualenv env_name new_name

Вывести список окружений / активировать окружение:

$ workon
$ workon env_name

Хорошо, если у вас есть в проекте файл requirements.txt с зафиксированными версиями библиотек. Если это не так, вы можете взять список с рабочего сервера, например:

$ pip freeze > requirements.txt

А затем установить их внутри окружения.

$ pip install -r requirements.txt

__________________________________________________________________________________________

Еще +1 инструмент в копилку на пути к совершенству.

Спасибо дочитавшим, впереди нас ждет множество инструментов и технологий :)

Подробнее почитать про export и source