Giter Site home page Giter Site logo

yliasolom / recoservice Goto Github PK

View Code? Open in Web Editor NEW

This project forked from feldlime/recoservicetemplate

0.0 0.0 0.0 302 KB

Этот репозиторий содержит код для сервиса рекомендаций, который использует алгоритмы машинного обучения для предоставления персонализированных рекомендаций фильмов пользователям на основе их предпочтений и поведения.

Python 92.42% Makefile 4.24% Dockerfile 3.34%

recoservice's Introduction

Шаблон сервиса рекомендаций

Подготовка

Python

В данном шаблоне используется Python3.8, однако вы можете использовать более свежие версии, если хотите. Но мы не гарантируем, что все будет работать.

Make

Make - это очень популярная утилита, предназначенная для преобразования одних файлов в другие через определенную последовательность команд. Однако ее можно использовать для исполнения произвольных последовательностей команд. Команды и правила их исполнения прописываются в Makefile.

Мы будем активно использовать make в данном проекте, поэтому рекомендуем познакомится с ней поближе.

На MacOS и *nix системах make обычно идет в комплекте или ее можно легко установить. Некоторые варианты, как можно поставить make на Windows, описаны здесь.

Poetry

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

Поэтому перед началом работы необходимо выполнить шаги по установке.

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

Мы будем работать в виртуальном окружении, которое создадим специально для данного проекта. Если вы не знакомы с концепцией виртуальных окружений в Python, обязательно познакомьтесь. Мы рекомендуем использовать отдельное виртуальное окружение для каждого вашего проекта.

Инициализация окружения

Выполните команду

make setup

Будет создано новое виртуальное окружение в папке .venv. В него будут установлены пакеты, перечисленные в файле pyproject.toml.

Обратите внимание: если вы один раз выполнили make setup, при попытке повторного ее выполнения ничего не произойдет, поскольку единственная ее зависимость - директория .venv - уже существует. Если вам по какой-то причине нужно пересобрать окружение с нуля, выполните сначала команду make clean - она удалит старое окружение.

Установка/удаление пакетов

Для установки новых пакетов используйте команду poetry add, для удаления - poetry remove. Мы не рекомендуем вручную редактировать секцию с зависимостями в pyproject.toml.

Линтеры, тесты и автоформатирование

Автоформатирование

Командой make format можно запустить автоматическое форматирование вашего кода.

Сейчас ее выполнение приведет лишь к запуску isort - утилиты для сортировки импортов в нужном порядке. При желании вы также можете добавить другие инструменты, например black или yapf, которые могут действительно отформатировать код.

Статическая проверка кода

Командой make lint вы запустите проверку линтерами - инструментами для статического анализа кода. Они помогают выявить ошибки в коде еще до его запуска, а также обнаруживают несоответствия стандарту PEP8.

Тесты

Командой make test вы запустите тесты при помощи утилиты pytest.

Запуск приложения

Способ 1: Python + Uvicorn

python main.py

Приложение запустится локально, в одном процессе. Хост и порт по умолчанию: 127.0.0.1 и 8080. Их можно изменить через переменные окружения HOST и PORT.

Управляет процессом легковесный ASGI server uvicorn.

Обратите внимание: для запуска нужно использовать python из окружения проекта.

Способ 2: Uvicorn

uvicorn main:app

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

Обратите внимание: для запуска нужно использовать uvicorn из окружения проекта.

Способ 3: Gunicorn

gunicorn main:app -c gunicorn.config.py

Способ похож на предыдущий, только вместо uvicorn используется более функциональный сервер gunicorn (uvicorn используется внутри него). Параметры задаются через конфиг, хост и порт можно задать через переменные окружения или аргументы командной строки.

Сервис запускается в несколько параллельных процессов, по умолчанию их число равно числу ядер процессора.

Обратите внимание: для запуска нужно использовать gunicorn из окружения проекта.

Способ 4: Docker

Делаем все то же самое, но внутри docker-контейнера. Если вы не знакомы с docker, обязательно познакомьтесь.

Внутри контейнера можно использовать любой из способов, описанных выше. В продакшене рекомендуется использовать gunicorn.

Собрать и запустить образ можно командой

make run

CI/CD

Когда вы делаете пуш в гит (в любую ветку), выполняется процесс CI. Что именно выполняется в этом процессе и как он триггерится (в данном случае по пушу), описывается в специальных .yaml конфигах в папке .github/workflows.

Сейчас там есть только один конфиг, который запускает процесс, в котором создается виртуальное окружение, прогоняются линтеры и тесты. Если что-то пошло не так, процесс падает с ошибкой и в Github появляется красный крестик. Вам нужно посмотреть логи, исправить ошибку и запушить изменения.

recoservice's People

Contributors

feldlime avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.