Разобрали ключевые отличия фреймворка от библиотеки и другими типами импортируемых объектов в Python с применением диаграмм.
Реальные программы сложны и даже элементарный симулятор игральных костей требует большого количества кода. Чтобы упростить процесс, разработчики используют модульное программирование — разбивают задачи на более мелкие и более управляемые. Поэтому в языке программирования так много модулей, пакетов, библиотек и фреймворков.
Запутаться в них новичку легко. Так что в этой статье я объясню, в чем разница между ними. Условно можно обозначить их взаимоотношения с помощью этой диаграммы:
Модуль (Module)
Модуль в Python — это логически обособленный сниппет в отдельном файле .py. Если вы хотите порядка в своем коде, рекомендую их использовать.
Достоинства модулей в том, что они:
- помогают сосредоточиться на одной небольшой части задаче;.
- сводят на нет дублирование за счет переиспользования;
- минимизируют вероятность конфликта имен.
Давайте разберем их на примере. Создадим функцию приветствия:
def welcome_message(course):
print("Спасибо, что выбрали курс «" + course + "». Скоро вы получите письмо с расписанием.")
Сохранив ее в welcome.py, мы создадим модуль. Если welcome_message() понадобился, его импортируем директивой:
import welcome
welcome.welcome_message("Основы Data Science")
Сообщение будет выглядеть так:
Спасибо, что выбрали курс «Основы Data Science». Скоро вы получите письмо с расписанием.
Обычно в модуле определяется множество разных элементов. Но мы можем импортировать только одну конкретную функцию:
from welcome import welcome_message
Если у вас есть опыт работы с Python, то вы наверняка использовали модули re, datetime и проч.
Пакет (Package)
При разработке большого приложения легко столкнуться с множеством различных модулей, которыми сложно управлять. В таком случае полезно сгруппировать и упорядочить их с помощью пакетов.
Это каталоги модулей с иерархической структурой пространства имен. Точно так же, как мы раскладываем файлы на жестком диске по папкам и субдиректориям, можно организовать модули в пакеты и «подпакеты» (subpackages).
Пакет должен содержать файл с именем __init__.py, который и позволяет использовать каталог.
Пакет Writing (писательство) и его модули Books (книги) и Article (статьи)
В мире пакетов для Python есть немало «звезд», о которых вы наверняка слышали:
- numpy — для научных вычислений;
- pandas — для обработки табличных данных;
- pytest — для тестирования.
Если классическое веб-приложение активно использует всевозможные компоненты, то в Data Science скачок на пакеты происходит на первых же уроках, и модули проходят вскользь.
В Python установленные пакеты можно посмотреть командой:
pip list
Библиотека (Library)
Это объект еще выше уровнем: он содержит связанные модули и/или пакеты. Часто «библиотеки» и «пакеты» выступают синонимами, потому что и те, и другие содержат модули и «подпакеты» (subpackages).
На мой взгляд, разница между ними весьма условная. Это становится очевидно, когда сравниваешь списки звезд из текущего и предыдущего разделов:
- Matplotlib — для визуализации данных;
- PyTorch — для глубокого обучения;
- BeautifulSoup4 — для парсинга.
Установка библиотек Python также производится командой pip:
pip install pytorch
Фреймворк (Framework)
Также набор модулей и пакетов, которые и ускоряют процесс программирования. Но более сложный и с архитектурой приложения.
Если сравнивать разработку со строительством дома, фреймворки Python предоставляют все необходимые строительные блоки, такие как фундамент, стены, окна и крыша. И разработчики строят свое приложение на этой основе, добавляя функции, сравнимые с домашней системой сигнализации, мебелью, бытовой техникой и так далее.
Известные представители класса – это:
- Django — фреймворк Python для сайта;
- Flask для легковесных демо-проектов;
- Bottle для создания API.
Заключение
Теперь вы знаете, в чем отличия модуля от библиотеки и от фреймворка. Более того, на старте новичку стоит понимать лишь отличие модуля от пакета и библиотек. А фреймворки придут в код позже, бесшовно и не спутают карты.