В чем разница между модулем и библиотекой в ​​Python?

86

У меня есть опыт работы с Java, и я новичок в Python. Прежде чем продолжить, я хочу убедиться, что правильно понимаю терминологию Python.

Я понимаю модуль : сценарий, который может быть импортирован многими сценариями для облегчения чтения. Как и в java, у вас есть класс, и этот класс может быть импортирован многими другими классами.

Я понимаю библиотеку : библиотека содержит множество модулей, которые разделены ее использованием.

Мой вопрос: являются ли библиотеки подобными пакетам, если у вас есть пакет, например food, вызывается , а затем:

  • chocolate.py
  • sweets.py
  • biscuts.py

содержатся в foodупаковке?

Или библиотеки используют пакеты, поэтому, если бы у нас был другой пакет drink:

  • milk.py
  • сок.py

содержится в упаковке. libraryСодержит два пакета?

Кроме того, интерфейс прикладного программирования (API) обычно содержит набор библиотек, который находится наверху иерархии:

  1. API
  2. Библиотека
  3. Пакет
  4. Модуль
  5. Сценарий

Значит, API будет состоять всего из 2-5?

шутник
источник
3
Python использует термин «пакет», а не «библиотека» (кроме стандартной библиотеки).
Джон Цвинк 05

Ответы:

75

Из Учебника Python - Модули

  • Модуль :

    Модуль - это файл, содержащий определения и инструкции Python. Имя файла - это имя модуля с .pyдобавленным суффиксом .

  • Пакет :

    Пакеты - это способ структурировать пространство имен модулей Python с помощью «разделенных точками имен модулей».

Если вы читаете документацию к importзаявлению, вы можете получить более подробную информацию, например:

Python имеет только один тип объекта модуля , и все модули относятся к этому типу, независимо от того, реализован ли модуль на Python, C или чем-то еще. Чтобы помочь организовать модули и обеспечить иерархию имен, в Python есть концепция пакетов.

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

Важно помнить, что все пакеты являются модулями, но не все модули являются пакетами. Или, другими словами, пакеты - это просто особый вид модуля. В частности, __path__пакетом считается любой модуль, содержащий атрибут.

Следовательно, термин moduleотносится к определенной сущности: это класс, экземпляры которого являются moduleобъектами, которые вы используете в программах на Python. Он также используется по аналогии для обозначения файла в файловой системе, из которого эти экземпляры «созданы».

Термин сценарий используется для обозначения модуля, цель которого должна быть выполнена. Он имеет то же значение, что и «программа» или «приложение», но обычно используется для описания простых и небольших программ (т. Е. Одного файла, содержащего не более нескольких сотен строк). Написание сценария занимает минуты или несколько часов.

Термин библиотека - это просто общий термин для связки кода, который был разработан с целью использования многими приложениями. Он предоставляет некоторые общие функции, которые могут использоваться конкретными приложениями.

Когда модуль / пакет / что-то еще «публикуется», люди часто называют его библиотекой. Часто библиотеки содержат пакет или несколько связанных пакетов, но это может быть даже один модуль.

Библиотеки обычно не предоставляют каких-либо конкретных функций, то есть вы не можете «запустить библиотеку».

API может иметь разное значение в зависимости от контекста. Например:

  • он может определять протокол, такой как API БД или протокол буфера .
  • он может определять, как взаимодействовать с приложением (например, Python/C API)
  • когда это связано с библиотекой / пакетом, это просто интерфейс, предоставляемый этой библиотекой для ее функциональности (набор функций / классов / констант и т. д.)

В любом случае API - это не код Python. Это описание может быть более или менее формальным.

Бакуриу
источник
37

Только пакет и модуль имеют четко определенное значение, характерное для Python.

  1. API не коллекция кода в себе - это больше похоже на «протокол» спецификации , как различные части (обычно библиотеки) взаимодействуют друг с другом. В python есть несколько примечательных «стандартных» API. Например, API БД

  2. На мой взгляд, библиотека - это все, что не является приложением - в Python библиотека - это модуль - обычно с подмодулями . Объем библиотеки довольно изменчиво - например, питон стандартная библиотека огромна (с довольно несколькими подмодулями) , а есть множество библиотек одноцелевых в PyPi, например, Backport из collections.OrderedDictза р <2,7

  3. Пакет представляет собой набор модулей питона под общим пространством имен. На практике один из них создается путем помещения нескольких модулей Python в каталог со специальным __init__.pyмодулем (файлом).

  4. Модуль представляет собой один файл питона кода , который предназначен для быть импортированы . Это небольшое упрощение, поскольку на практике довольно много модулей обнаруживают, когда они запускаются как скрипт, и в этом случае делают что-то особенное.

  5. Сценарий представляет собой один файл питон кода , который предназначен быть выполнен как «основной» программа.

  6. Если у вас есть набор кода, охватывающий несколько файлов, у вас, вероятно, есть приложение вместо скрипта.

Kimvais
источник
1

Библиотека: это набор модулей.

(Библиотека содержит либо встроенные модули (написанные на C) + модули, написанные на python).

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

Говоря неформальным языком, модуль - это набор строк кода, которые используются для определенной цели и могут использоваться в других программах как есть, чтобы избежать DRY ( D on't R epeat Y ourself) в качестве команды и сосредоточиться на главное требование. источник

API - это интерфейс, позволяющий другим приложениям взаимодействовать с вашей библиотекой без прямого доступа.

Пакет - это в основном каталог с файлами.

Скрипт означает серию команд в одном файле.

Премрадж
источник
0

Я постараюсь ответить на этот вопрос, не используя термины, которые использовали бы самые первые новички, и объясню, почему или как они использовали по-другому, наряду с наиболее «официальным» и / или наиболее понятным или единообразным использованием терминов.

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

Библиотека - чаще всего будет относиться к общей библиотеке или другой коллекции, созданной в аналогичном формате и использовании. Общая библиотека - это совокупность «стандартных», популярных и широко используемых модулей, которые на данный момент можно рассматривать как однофайловые инструменты или как сокращения, делающие вещи возможными или быстрее. Общая библиотека - это опция, которую большинство людей включают при установке Python. Поскольку он называется «Общая библиотека Python», он часто используется с похожей структурой и идеями. Ведьма - это просто набор модулей, может быть, даже пакетов, сгруппированных вместе, обычно в виде списка. Список обычно предназначен для их загрузки. Обычно это просто связанные файлы со схожими интересами. Это самый простой способ описать это.

Модуль - модуль относится к файлу. В файле есть сценарий «в нем», а имя файла - это имя модуля, файлы Python заканчиваются на .py. Все, что содержит файл, - это код, который запускается вместе, чтобы что-то произошло, используя функции, строки и т. Д. Основные модули, которые вы, вероятно, видите чаще всего, популярны, потому что это специальные модули, которые могут получать информацию из других файлов / модулей. Это сбивает с толку, потому что имена файла и модуля равны и просто опускают .py. На самом деле это просто код, который вы можете использовать как ярлык, написанный кем-то, чтобы сделать что-то проще или возможным.

Пакет - этот термин обычно используется иногда, хотя контекст имеет значение. По моему опыту, наиболее частое использование - несколько модулей (или файлов), сгруппированных вместе. Почему они сгруппированы вместе, может быть по нескольким причинам, то есть когда имеет значение контекст. Вот как я заметил термин пакет (ы)используемый. Они представляют собой группу загруженных, созданных и / или сохраненных модулей. Все это может быть правдой или только 1, но на самом деле это просто файл, который ссылается на другие файлы, которые должны быть в правильной структуре или формате, и вся эта сумма представляет собой сам пакет, установленный или мог быть включен в общая библиотека python. Пакет может содержать модули (файлы .py), потому что они зависят друг от друга и иногда могут работать некорректно или вообще. У каждой части (модуля / файла) пакета всегда есть общая цель, и общая сумма всех частей - это сам пакет.

Чаще всего в пакетах Python используются модули, потому что имя пакета - это имя модуля, который используется для соединения всех частей. Таким образом, вы можете ввести пакет, потому что это модуль, а также позволяет ему вызывать другие модули, которые не являются пакетами, потому что они выполняют только определенную функцию, или задача не связана с другими файлами. У пакетов есть цель, и каждый модуль работает вместе для достижения этой конечной цели.

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

Помните, что модули и пакеты могут быть установлены. Библиотека - это обычно общий термин для перечисления или форматирования группы модулей и пакетов. Очень похоже на общую библиотеку Pythons. Иерархия не будет работать, API-интерфейсы на самом деле не принадлежат, и если бы вы это сделали, они могли бы быть где угодно и каждое изделие, включающее скрипт, модуль и пакеты, причем библиотека word - это такое общее слово, легко применимое ко многим вещам, также позволяет API сидеть выше или ниже этого. Некоторые модули могут быть основаны на другом коде, и я думаю, что это единственный раз, когда это касается обсуждения, связанного с чистым Python.

Мизат
источник