Лекции
September 25, 2020

Git. venv. requirements.txt. Makefile. Django или?..

0. Git

Git - это система контроля версий. Он используется, чтобы можно было вернуться к любому моменту из процесса разработки программы. Существует несколько подходов к ведению git-репозиториев, но основной для меня такой: на каждую новую задачу (или класс задач, зависит от серьёзности и объёма) я завожу новую ветку в репозитории. На каждое отдельное самостоятельное изменение я делаю один коммит. Например, если мы меняем три метода в одном файле, то это должно быть три разных коммита. Но если мы меняем название метода, то логично, что во всех местах его вызова в том же коммите следует поменять его название.

***

Запомните, коммиты через сайт делать нельзя. Для командной строки достаточно знать всего лишь три команды:

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

Хочу начать с небольшой вводной части. Вы наверняка работали уже с unix-системами на других предметах и, скорее всего, имеете представление о bash и командной строке, если нет, лучше предупредить сразу. Возможно, есть ребята, которые регулярно пользуются Linux/MacOS? В качестве основной системы?

Думаю, тогда для вас не будет сюрпризом то, что python установлен в unix-системах обычно по умолчанию. Как второй, так и третий. Иногда бывает нужно запустить какую-то программу обособлено от всей основной системы. И тут на помощь приходит venv.

Сравнение разных инструментов:

Есть три наиболее предпочтительных (на мой взгляд) инструмента для работы с виртуальным окружением в python — это venv, conda, pipenv. Но conda больше используется у дата-саентистов, поэтому вам лучше выбирать между venv и pipenv. Venv — стандартная библиотека питона, то есть всё будет работать из коробки, но зависимости нужно фиксировать ручками, а ещё нельзя забывать активировать виртуальное окружение перед началом работы. Pipenv же более гибкий в этом плане, если кто-то из вас работал с npm  и node_modules, то вы так же сможете работать и с pipenv, он автоматически фиксирует зависимости в Pipfile и Pipfile.lock. Pipenv — это довольно интересный вариант для работы с виртуальным окружением. Он несколько более интуитивный. Но сегодня предлагаю разобраться со стандартным venv, а уже потом решите для себя — что вы хотите использовать.

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

2. requirements.txt

Чтобы любой другой человек мог установить вашу программу на своём компьютере — вам нужно обязательно фиксировать зависимости. Сделать это можно внутри виртуального окружения командой:

$ pip freeze > requirements.txt

Важно, иногда туда может попасть что-то лишнее, например:

pkg-resources==0.0.0

Избежать можно вот так:

pip freeze | grep -v "pkg-resources" > requirements.txt

Пример requirements.txt:

3. Makefile

Вообще, изначально Makefile использовался и задумывался для написания инструкций по сборке программ на C. Но его применение оказалось настолько удобным, что его начали использовать не только для этого. Я использую его для унификации используемых команд. Это полезно, потому что мне время от времени приходится переключаться с языка на язык и хотелось бы везде иметь одни и те же команды, чтобы установить зависимости, запустить проект, собрать его, если это предполагается. По факту, основное отличие Makefile от bash.sh в том, что с помощью него можно не генерировать заново те файлы, которые уже были сгенерированы.

Пример Makefile:

4. Swot-анализ (https://habr.com/ru/post/440282/)

Django

Описание: самый популярный комбайн для Python, который из коробки решает множество проблем (админка, авторизация, логирование, ORM, и т.д). Это упрощает жизнь разработчика, но если мы ставим в приоритет скорость работы — то иногда такой комбайн играет против нас и это сказывается на производительности. По этой причине номинацию Fastest Python Web Framework in 2019 он скорее всего не возьмет.

Flask

Описание: самый популярный фреймворк на Python (по звездам в GitHub обгоняет даже Django). Популярный выбор в случаях разработки мелких проектов, для которых не нужны те плюшки, которые есть в Django. Позволяет быстро развернуть приложение. Возможно быстрее чем Django по скорости работы, но имеет очень маленькую функциональность “из коробки”.

AioHTTP

Описание: очень привлекательный асинхронный Python Framework. Имеет версию клиента и сервера, что значительно развязывает руки при разработке. Обладает очень удобными асинхронными запросами с версии клиента, а также очень хорошие показатели скорости работы сервера при большом количество запросов. Точно должен попасть в тройку лидеров.

Sanic

Описание: можно сказать, что это “многопоточный Flask” со всеми вытекающими.

Tornado

Описание: асинхронный ветеран Python движения, задавший тренд асинхронности в 2010 году. Не теряет своей актуальности и получил 5ю версию в 2018 году. Достаточно высокий порог входа для новичков. Популярен среди олдскульных питонистов, и мы думаем не зря. Должен показать хорошие результаты.