🐍 Итоги недели в мире Python и обзоры новых инструментов: как сделать собственный Google на 80 строках Python-кода
Привет!
Всю неделю мы мониторим интернет, чтобы в воскресенье прислать тебе интересное письмо. Наша цель – держать читателей в курсе последних открытий и тенденций в мире Python. В еженедельных письмах ты найдешь:
- Новые возможности в последних версиях Python
- Работа с базами данных и SQL в Python.
- Веб-разработка на Django и Flask.
- Машинное обучение и анализ данных с помощью Python.
- Автоматизация и работа с API на Python.
- Тестирование и отладка кода на Python.
- Задачи для новичков с решениями.
Поисковик на 80 строках кода; Гарри Поттер и движок Elasticsearch; как сделать чат-бота, имитирующего стиль Эминема; что круче Poetry?
🔎 Поисковик на 80 строках кода
Публикация рассказывает, как сделать базовую поисковую систему буквально на 80 строках Python-кода. Автор последовательно реализовал все основные компоненты поисковика:
- Краулер – собирает и сохраняет данные с разных сайтов. Автор использовал блоги и RSS-ленты, которые читает. Также он оптимизировал работу краулера с помощью асинхронности в Python.
- Инвертированный индекс – структура данных, которая для заданных ключевых слов хранит список документов, где эти слова встречаются. Это позволяет быстро искать нужные документы. Этот компонент реализован с помощью словарей.
- Ранжировщик – сортирует найденные документы по релевантности запросу. В проекте использован алгоритм BM25.
- Интерфейс – простое веб-приложение на базе FastAPI для взаимодействия пользователя с поисковой системой.
Вспомогательные компоненты, которые обычно используются в поисковиках, обсуждаются в заключении. Хотя это только PoC, проект дает отличное представление о принципах работы реальной поисковой системы.
👍 Полезные библиотеки
Web2PDF – CLI-инструмент для конвертации веб-страниц (по URL) в PDF-файлы. Поддерживает пакетную обработку множества ссылок и предоставляет все возможности по кастомизации внешнего вида документов: можно настроить все – от типа и размера шрифта до фонового цвета и размера страниц.
Работать с Web2PDF очень просто
PyPDFForm – автоматизирует работу с PDF-формами:
- инспектирует формы и заполняет нужные поля значениями из словарей;
- вставляет изображения в существующие документы;
- извлекает и объединяет отдельные страницы документа;
- создает подмножества виджетов и полей в существующих PDF-формах.
Заполнение формы из Python-словаря
Rexi – инструмент для работы с регулярными выражениями в терминале. Основные возможности:
- Интерактивный пользовательский интерфейс на базе библиотеки textual.
- Поддержка двух режимов: match и finditer для применения regex.
- Мгновенная визуализация результатов применения regex к входным данным.
- Простота использования – запуск одной командой, чтение данных из stdin.
Работает так:
- Запускаешь rexi из терминала.
- Вводишь регулярное выражение в специальное поле.
- Выбираешь режим match или finditer.
- Сразу видишь результат применения regex к входным данным из stdin.
Rexi в действии
Skorche – библиотека для простого управления всевозможными заданиями. Поддерживает параллельное и асинхронное выполнение задач.
Django HTMX Components – набор готовых компонентов, которые можно скопировать и вставить в Django-приложение.
🕹 Управление зависимостями
Когда пора переходить с requirements.txt на Poetry?
Файл requirements.txt и Poetry решают похожие задачи по управлению зависимостями в Python-проектах, но возможностей у Poetry, разумеется, намного больше:
- Для небольших учебных и практических проектов вполне достаточно requirements.txt. Это простой текстовый файл, который легко читать и редактировать.
- Если нужна переносимость кода между системами и командами разработчиков – лучше подходит Poetry. Он гарантирует идентичные окружения и версии библиотек на разных машинах.
- Poetry идеально подходит для больших проектов со множеством зависимостей, которые нужно четко разделять между средами разработки, тестирования и продакшена.
- Если нужно автоматизировать сборку проекта в пакеты, Poetry – оптимальный выбор.
Туториал покажет, как перейти на Poetry:
- На примере небольшого проекта показываются все основные команды Poetry (создание структуры проекта, установка и удаление зависимостей, генерация файла блокировки версий и т. д.)
- Рассказывается про файл pyproject.toml, который заменяет традиционный requirements.txt и позволяет лучше управлять зависимостями.
Что круче Poetry?
Rye – новейшая альтернатива Poetry. Этот инструмент создал автор Flask – Армин Ронахер. Как и другие новомодные штуки, Rye написан на Rust, и делает все то же самое, что и Poetry, но проще и быстрее, плюс управляет версиями самого Python.
🔥 Интересные проекты
«Гарри Поттер и движок Elasticsearch» – это семантическая поисковая система на основе векторной базы данных с информацией о вселенной Гарри Поттера:
- В первой части создается индекс в Elasticsearch, где каждый документ – это персонаж со своими атрибутами. Этот индекс можно использовать для поиска персонажей по разным критериям.
- Во второй части подключается клиент для работы с Elasticsearch. Создается индекс на основе сценария первого фильма про Гарри Поттера. Используются модели Hugging Face для анализа тональности текста и построения векторных представлений слов. Комбинируя разные модели, можно делать более сложные семантические поисковые запросы и сравнивать с встроенными возможностями Elasticsearch. Процесс подключения и работа с Elasticsearch подробно описаны в этой статье.
- В третьей части с помощью Flask создается простое веб-приложение как интерфейс для поиска – подробное описание процесса приведено здесь. Также вводится новый индекс для хранения истории поисковых запросов.
Видеотуториал покажет, как сделать чат-бота, имитирующего стиль Эминема. Это очень простой проект для начинающих на основе Streamlit, Langchain и OpenAI API. Демо-проекта работает здесь (приходите со своим OpenAI-ключом), а весь исходный код находится в репозитории.
🎨 Визуализация результатов тестирования с помощью Rich
Автор статьи столкнулся с необходимостью отладить сложный код финансовых расчетов, перенесенный из старого приложения ColdFusion. Изначально разработчик использовал стандартный вывод pytest для чисел, но читать такой вывод было неудобно и утомительно.
Сравнивать числа при стандартном выводе совершенно неудобно
Проблему решил табличный вывод с помощью библиотеки Rich:
- Таблицы значительно ускоряют визуальное сравнение значений.
- Если выделить красным цветом разницу между ожидаемыми и фактическими значениями, а совпадения сделать зелеными – дело идет еще быстрее.
Вывод результатов тестирования в таблицах Rich
🎥 Видеокурс по созданию и деплою фуллстек-приложения
9-часовой курс во всех подробностях покажет разработку и развертывание Django-приложения. Основные этапы:
- Процесс создания контент-платформы на базе Django, PostgreSQL и облачного хранилища Amazon S3. На фронтенде используются Tailwind и HTMX.
- Упаковка приложения в Docker-контейнер.
- Деплой в Kubernetes – настройка переменных окружения, секретов, сетевых подключений.
Автор рассылки: Наталья Кайда