Одна из глобальных проблем при разработке и выкатке на бой приложений - это работа с зависимостями и средами.
Вы любите Windows или Ubuntu, а приложения пишете под Debian или наоборот. Может быть вам необходимо использовать библиотеку конкретной версии. Чтобы приложение вело себя предсказуемо у вас на машине и на боевом сервере придумано большое количество инструментов по виртуализации / контейнеризации, но сегодня остановимся на виртуальных окружениях. Собрал небольшую памятку по установке и азам работы с ними.
UPD: У меня стоит Ubuntu, все указанное ниже проверялось на этой системе. Думаю с небольшими изменениями будет актуально для Linux систем.
Виртуальное окружение.
Немного повторюсь, зачем нам виртуальные окружения?
Если коротко, они помогают управлять зависимостями и разграничить проекты, которые требуют разные версии библиотек.
Если чуть подлиннее: предположим у вас несколько проектов: два из них передовые, они постоянно рефакторятся и поддерживаются в актуальном состоянии, а третий "гадкий утенок", создается ощущение, что он уже был устаревшим еще до основания компании. Настала ваша очередь что-то в нем править, но версии библиотек на этом проекте и вашей машине не совпадают. На помощь приходит виртуальное окружение.
virtualenv + virtualenvwrapper установка
Есть сама утилита для виртуальных окружений, которая к сожалению становится не очень удобна в использовании, когда их количество начинает расти. Хорошая новость, что добрые люди запилили над ней обертку и существенно повысили удобство. Итак, установка:
$ 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 инструмент в копилку на пути к совершенству.
Спасибо дочитавшим, впереди нас ждет множество инструментов и технологий :)