🐍 Итоги недели в мире Python и обзоры новых инструментов: как сделать собственный Google на 80 строках Python-кода

🐍  Итоги недели в мире 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-файлы. Поддерживает пакетную обработку множества ссылок и предоставляет все возможности по кастомизации внешнего вида документов: можно настроить все – от типа и размера шрифта до фонового цвета и размера страниц.

<p>Работать с Web2PDF очень просто</p>

Работать с Web2PDF очень просто

PyPDFForm – автоматизирует работу с PDF-формами:

  • инспектирует формы и заполняет нужные поля значениями из словарей;
  • вставляет изображения в существующие документы;
  • извлекает и объединяет отдельные страницы документа;
  • создает подмножества виджетов и полей в существующих PDF-формах.
<p>Заполнение формы из Python-словаря</p>

Заполнение формы из 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 для чисел, но читать такой вывод было неудобно и утомительно.

<p>Сравнивать числа при стандартном выводе совершенно неудобно</p>

Сравнивать числа при стандартном выводе совершенно неудобно

Проблему решил табличный вывод с помощью библиотеки Rich:

  • Таблицы значительно ускоряют визуальное сравнение значений.
  • Если выделить красным цветом разницу между ожидаемыми и фактическими значениями, а совпадения сделать зелеными – дело идет еще быстрее.
<p>Вывод результатов тестирования в таблицах Rich</p>

Вывод результатов тестирования в таблицах Rich

🎥 Видеокурс по созданию и деплою фуллстек-приложения

9-часовой курс во всех подробностях покажет разработку и развертывание Django-приложения. Основные этапы:

  • Процесс создания контент-платформы на базе Django, PostgreSQL и облачного хранилища Amazon S3. На фронтенде используются Tailwind и HTMX.
  • Упаковка приложения в Docker-контейнер.
  • Деплой в Kubernetes – настройка переменных окружения, секретов, сетевых подключений.

Автор рассылки: Наталья Кайда

5
2 комментария