У чому різниця між модулем та бібліотекою в Python?


86

У мене є досвід роботи в Java, і я новачок у Python. Я хочу переконатися, що правильно розумію термінологію Python, перш ніж продовжувати.

Я розумію модуль : сценарій, який можна імпортувати багатьма сценаріями, щоб полегшити читання. Так само, як у Java, у вас є клас, і цей клас може бути імпортований багатьма іншими класами.

Я розумію бібліотеку : Бібліотека містить безліч модулів, які розділяються між собою використанням.

Моє запитання: Чи бібліотеки схожі на пакети, де у вас є пакет, наприклад, викликаний food, тоді:

  • шоколад.py
  • солодощі.py
  • biscuts.py

містяться в foodупаковці?

Або бібліотеки використовують пакети, тому, якби ми мали інший пакет drink:

  • молоко.py
  • сік.py

міститься в упаковці. libraryМістить два пакети?

Крім того, інтерфейс прикладного програмування (API), як правило, містить набір бібліотек, що знаходиться у верхній частині ієрархії:

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

Тож API складатиметься з 2-5?


3
Python використовує термін "пакет" і не дуже "бібліотека" (крім стандартної бібліотеки).
Джон Цвінк,

Відповіді:


75

З підручника з Python - Модулі

  • Модуль :

    Модуль - це файл, що містить визначення та твердження Python. Ім'я файлу - це ім'я модуля із .pyдоданим суфіксом .

  • Упаковка :

    Пакети - це спосіб структурування простору імен модулів Python за допомогою “пунктирних імен модулів”.

Якщо ви прочитаєте документацію до importвиписки, ви побачите більше деталей, наприклад:

Python має лише один тип об'єкта модуля , і всі модулі належать до цього типу, незалежно від того, реалізований модуль в Python, C чи чомусь іншому. Для організації модулів та забезпечення ієрархії імен Python має концепцію пакетів.

Ви можете розглядати пакети як каталоги у файловій системі, а модулі як файли в каталогах, але не сприймайте цю аналогію занадто буквально, оскільки пакети та модулі не повинні походити з файлової системи. Для цілей цієї документації ми використаємо цю зручну аналогію каталогів та файлів. Як і каталоги файлової системи, пакети організовані ієрархічно, і самі пакунки можуть містити підпакети, а також звичайні модулі.

Важливо пам’ятати, що всі пакети є модулями, але не всі модулі є пакетами. Або інакше кажучи, пакети - це лише особливий вид модуля. Зокрема, будь-який модуль, що містить __path__атрибут, вважається пакетом.

Звідси термін moduleвідноситься до певної сутності: це клас, екземпляри якого є moduleоб'єктами, які ви використовуєте в програмах python. За аналогією він також використовується для посилання на файл у файловій системі, з якого ці екземпляри "створені".

Термін скрипт використовується для позначення модуля, метою якого є виконання. Він має те саме значення, що і "програма" або "додаток", але зазвичай використовується для опису простих і невеликих програм (тобто одного файлу, що містить не більше сотень рядків). Написання сценарію займає хвилини або кілька годин.

Термін бібліотека - це просто загальний термін для набору коду, який був розроблений з метою використання у багатьох додатках. Він надає деякі загальні функціональні можливості, які можуть використовуватись певними програмами.

Коли модуль / пакет / щось інше «публікується», люди часто називають це бібліотекою. Часто бібліотеки містять пакет або кілька пов'язаних пакетів, але це може бути навіть один модуль.

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

API може мати різне значення залежно від контексту. Наприклад:

  • він може визначити такий протокол, як API DB або буферний протокол .
  • він може визначити , як взаємодіяти з додатком (наприклад Python/C API)
  • коли це пов'язано з бібліотекою / пакетом, це просто інтерфейс, що надається цією бібліотекою для її функціональності (набір функцій / класів / констант тощо)

У будь-якому випадку API не є кодом python. Це опис, який може бути більш-менш офіційним.


37

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

  1. API не колекція коду в собі - це більше схоже на «протокол» специфікації , як різні частини (зазвичай бібліотеки) взаємодіють один з одним. У python є кілька помітних "стандартних" API. Наприклад, API DB

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

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

  4. Модуль являє собою один файл пітона коду , який призначений для бути імпортовані . Це трохи спрощення, оскільки на практиці досить багато модулів виявляють, коли вони запускаються як скрипт, і роблять щось особливе в такому випадку.

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

  6. Якщо у вас є набір коду, який охоплює декілька файлів, можливо, у вас є програма замість сценарію.


1

Бібліотека: Це колекція модулів.

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

Модуль: Кожна з набору стандартизованих деталей або незалежних блоків, які можна використовувати для побудови більш складної структури.

Говорячи неформальною мовою, модуль - це набір рядків коду, які використовуються для певної мети і можуть бути використані в інших програмах, як є, щоб уникнути СУХОГО ( D on't R repeat Y ourself) як команди та зосередження на головна вимога. джерело

API - це інтерфейс для інших програм для взаємодії з вашою бібліотекою без прямого доступу.

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

Сценарій означає серію команд в одному файлі.


0

Я спробую відповісти на це, не використовуючи терміни, які використовували б самі ранні початківці, і пояснити, чому або як вони вживали інакше, поряд із найбільш "офіційним" та / або найбільш зрозумілим або єдиним використанням цих термінів.

Це може заплутати, і я переплутав себе, думаючи важко, тому не думайте багато про це. У будь-якому випадку контекст має велике значення.

Бібліотека - найчастіше буде посилатися на загальну бібліотеку або іншу колекцію, створену в подібному форматі та використаній. Загальна бібліотека - це сукупність «стандартних», популярних і широко використовуваних модулів, про які можна уявляти себе як однофайлові інструменти на даний час або як швидкі скорочення, що роблять це можливим або швидшим. Загальна бібліотека - це опція, яку більшість людей вмикають при встановленні Python. Оскільки вона має таку назву "Загальна бібліотека Python", вона часто використовується зі схожою структурою та ідеями. Відьма - це просто мати модуль, можливо, навіть пакети, згруповані разом, як правило, у списку. Список, як правило, для їх завантаження. Як правило, це лише пов'язані файли, що мають схожі інтереси. Це найпростіший спосіб описати це.

Модуль - Модуль посилається на файл. У файлі є "сценарій", і ім'я файлу - це ім'я модуля, файли Python закінчуються .py. Все, що містить файл, - це код, який, зібраний разом, щось робить, за допомогою функцій, рядків тощо. Основні модулі, які ви, мабуть, найчастіше бачите, користуються популярністю, оскільки це спеціальні модулі, які можуть отримувати інформацію з інших файлів / модулів. Це бентежить, тому що ім'я файлу та модуля рівні і просто скидають .py. Насправді це просто код, який ви можете використовувати як ярлик, написаний кимось, щоб зробити щось простішим чи можливим.

Пакет - це термін, який зазвичай використовується зазвичай, хоча контекст має значення. З мого досвіду найпоширенішим є використання декількох модулів (або файлів), які згруповані разом. Чому вони згруповані разом, може бути з кількох причин, саме тоді контекст має значення. Це способи, якими я помітив термін пакет (и)використовується. Вони являють собою групу Завантажених, створених та / або збережених модулів. Що може бути істинним, або лише 1, але насправді це лише файл, який посилається на інші файли, який повинен бути у правильній структурі або форматі, і вся сума - це сам пакет, встановлений або, можливо, був включений до загальна бібліотека python. Пакет може містити модулі (файли .py), оскільки вони залежать один від одного, а іноді можуть працювати некоректно або взагалі. Завжди існує загальна мета кожної частини (модуля / файлу) пакету, а загальна сума всіх частин - це сам пакет.

Найчастіше в Python Packages є модулі, оскільки ім'я пакета - це назва модуля, який використовується для з'єднання всіх частин. Таким чином, ви можете ввести пакет, оскільки це модуль, а також дозволяє йому викликати інші модулі, які не є пакетами, оскільки вони виконують лише певну функцію, або завдання не включає інші файли. Пакети мають свою мету, і кожен модуль працює разом для досягнення цієї кінцевої мети.

Найбільше плутанини походить від простого імені файлу файлу або префікса до файлу, який використовується як ім'я модуля, а потім знову ім'я пакета.

Пам'ятайте, що модулі та пакети можуть бути встановлені. Бібліотека, як правило, є загальним терміном для переліку або форматування групи модулів та пакетів. Подібно до загальної бібліотеки Pythons. Ієрархія не працювала б, API не належать насправді, і якби ви це зробили, вони могли б бути де завгодно, і кожен посуд, що включає скрипт, модуль та пакети, бібліотека worl є таким загальним словом, яке легко застосовується до багатьох речей, а також робить API здатним сидіти вище або нижче цього. Деякі модулі можуть базуватися на іншому коді, і це єдиний раз, я думаю, це стосуватиметься чисто дискусій, пов'язаних з Python.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.