Was ist der Unterschied zwischen einem Modul und einer Bibliothek in Python?

86

Ich habe Hintergrundwissen in Java und bin neu in Python. Ich möchte sicherstellen, dass ich die Python-Terminologie richtig verstehe, bevor ich fortfahre.

Mein Verständnis eines Moduls ist: ein Skript, das von vielen Skripten importiert werden kann, um das Lesen zu erleichtern. Genau wie in Java haben Sie eine Klasse, und diese Klasse kann von vielen anderen Klassen importiert werden.

Mein Verständnis einer Bibliothek ist: Eine Bibliothek enthält viele Module, die durch ihre Verwendung getrennt sind.

Meine Frage ist: Sind Bibliotheken wie Pakete, in denen Sie ein Paket haben, z. B. aufgerufen food, dann:

  • schokolade.py
  • sweets.py
  • biscuts.py

sind im foodPaket enthalten?

Oder verwenden Bibliotheken Pakete? Wenn wir also ein anderes Paket hätten drink:

  • milch.py
  • Juice.py

im Paket enthalten. Das libraryenthält zwei Pakete?

Eine Anwendungsprogrammierschnittstelle (API) enthält normalerweise eine Reihe von Bibliotheken. Diese befindet sich ganz oben in der Hierarchie:

  1. API
  2. Bibliothek
  3. Paket
  4. Modul
  5. Skript

Also wird eine API aus 2-5 bestehen?

Joker
quelle
3
Python verwendet den Begriff "Paket" und nicht sehr viel "Bibliothek" (abgesehen von der Standardbibliothek).
John Zwinck

Antworten:

75

Aus dem Python-Tutorial - Module

  • Modul :

    Ein Modul ist eine Datei, die Python-Definitionen und -Anweisungen enthält. Der Dateiname ist der Modulname mit dem .pyangehängten Suffix .

  • Paket :

    Pakete sind eine Möglichkeit, den Modul-Namespace von Python mithilfe von „gepunkteten Modulnamen“ zu strukturieren.

Wenn Sie die Dokumentation für die importAnweisung lesen, erhalten Sie weitere Details, zum Beispiel:

Python hat nur einen Typ von Modulobjekt , und alle Module sind von diesem Typ, unabhängig davon, ob das Modul in Python, C oder etwas anderem implementiert ist. Um Module zu organisieren und eine Namenshierarchie bereitzustellen, verfügt Python über ein Paketkonzept.

Sie können sich Pakete als Verzeichnisse in einem Dateisystem und Module als Dateien in Verzeichnissen vorstellen, aber nehmen Sie diese Analogie nicht zu wörtlich, da Pakete und Module nicht aus dem Dateisystem stammen müssen. Für die Zwecke dieser Dokumentation verwenden wir diese praktische Analogie von Verzeichnissen und Dateien. Wie Dateisystemverzeichnisse sind Pakete hierarchisch organisiert, und Pakete können selbst Unterpakete sowie reguläre Module enthalten.

Es ist wichtig zu beachten, dass alle Pakete Module sind, aber nicht alle Module Pakete. Oder anders ausgedrückt: Pakete sind nur eine besondere Art von Modul. Insbesondere wird jedes Modul, das ein __path__Attribut enthält , als Paket betrachtet.

Daher modulebezieht sich der Begriff auf eine bestimmte Entität: Es handelt sich um eine Klasse, deren Instanzen die moduleObjekte sind, die Sie in Python-Programmen verwenden. Analog wird es auch verwendet, um auf die Datei im Dateisystem zu verweisen, aus der diese Instanzen "erstellt" werden.

Der Begriff Skript bezieht sich auf ein Modul, dessen Ziel es ist, ausgeführt zu werden. Es hat die gleiche Bedeutung wie "Programm" oder "Anwendung", wird jedoch normalerweise zur Beschreibung einfacher und kleiner Programme verwendet (dh einer einzelnen Datei mit höchstens einigen hundert Zeilen). Das Schreiben eines Skripts dauert Minuten oder einige Stunden.

Der Begriff Bibliothek ist einfach ein Oberbegriff für eine Reihe von Codes, die mit dem Ziel entwickelt wurden, von vielen Anwendungen verwendet werden zu können. Es bietet einige allgemeine Funktionen, die von bestimmten Anwendungen verwendet werden können.

Wenn ein Modul / Paket / etwas anderes "veröffentlicht" wird, wird es häufig als Bibliothek bezeichnet. Oft enthalten Bibliotheken ein Paket oder mehrere verwandte Pakete, aber es kann sogar ein einzelnes Modul sein.

Bibliotheken bieten normalerweise keine spezifischen Funktionen, dh Sie können keine "Bibliothek ausführen".

Die API kann je nach Kontext unterschiedliche Bedeutungen haben. Zum Beispiel:

  • Es kann ein Protokoll wie die DB-API oder das Pufferprotokoll definieren .
  • es kann bestimmen , wie mit einer Anwendung (zB das zu interagieren Python/C API)
  • Wenn es sich um eine Bibliothek / ein Paket handelt, ist es einfach die Schnittstelle, die diese Bibliothek für ihre Funktionalität bereitstellt (Satz von Funktionen / Klassen / Konstanten usw.).

In jedem Fall ist eine API kein Python-Code. Es ist eine Beschreibung, die mehr oder weniger formal sein kann.

Bakuriu
quelle
37

Nur Paket und Modul haben eine genau definierte Bedeutung für Python.

  1. Eine API ist keine Sammlung von Code an sich - sie ähnelt eher einer "Protokoll" -Spezifikation, wie verschiedene Teile (normalerweise Bibliotheken) miteinander kommunizieren. Es gibt einige bemerkenswerte "Standard" -APIs in Python. ZB die DB API

  2. Meiner Meinung nach ist eine Bibliothek alles, was keine Anwendung ist - in Python ist eine Bibliothek ein Modul - normalerweise mit Submodulen . Der Umfang einer Bibliothek ist sehr variabel - zum Beispiel ist die Python-Standardbibliothek sehr umfangreich (mit einigen Submodulen), während das PyPi viele Einzelzweckbibliotheken enthält, z. B. einen Backport collections.OrderedDictfür py <2.7

  3. Ein Paket ist eine Sammlung von Python-Modulen unter einem gemeinsamen Namespace. In der Praxis wird eines erstellt, indem mehrere Python-Module in einem Verzeichnis mit einem speziellen __init__.pyModul (Datei) abgelegt werden.

  4. Ein Modul ist eine einzelne Datei mit Python-Code, die importiert werden soll . Dies ist eine kleine Vereinfachung, da in der Praxis einige Module erkennen, wann sie als Skript ausgeführt werden, und in diesem Fall etwas Besonderes tun.

  5. Ein Skript ist eine einzelne Datei mit Python-Code, die als Hauptprogramm ausgeführt werden soll .

  6. Wenn Sie einen Satz Code haben, der mehrere Dateien umfasst, haben Sie wahrscheinlich eine Anwendung anstelle eines Skripts.

Kimvais
quelle
1

Bibliothek: Es ist eine Sammlung von Modulen.

(Die Bibliothek enthält entweder integrierte Module (in C geschrieben) + in Python geschriebene Module).

Modul: Jedes aus einer Reihe standardisierter Teile oder unabhängiger Einheiten, mit denen eine komplexere Struktur erstellt werden kann.

In einer informellen Sprache gesprochen, besteht ein Modul aus Codezeilen, die für einen bestimmten Zweck verwendet werden und in anderen Programmen verwendet werden können, um DRY ( D on't R epeat Y ourself) als Team zu vermeiden und sich darauf zu konzentrieren Hauptanforderung. Quelle

API ist eine Schnittstelle für andere Anwendungen, um mit Ihrer Bibliothek zu interagieren, ohne direkten Zugriff zu haben.

Paket ist im Grunde ein Verzeichnis mit Dateien.

Skript bedeutet eine Reihe von Befehlen in einer einzelnen Datei.

Premraj
quelle
0

Ich werde versuchen, dies zu beantworten, ohne Begriffe zu verwenden, die der früheste Anfänger verwenden würde, und erklären, warum oder wie sie anders verwendet haben, zusammen mit der "offiziellsten" und / oder am besten verstandenen oder einheitlichsten Verwendung der Begriffe.

Es kann verwirrend sein, und ich habe mich verwirrt, zu viel nachzudenken, also denke nicht zu viel darüber nach. Wie auch immer, der Kontext ist sehr wichtig.

Bibliothek - Meistens wird auf die allgemeine Bibliothek oder eine andere Sammlung verwiesen, die mit einem ähnlichen Format und einer ähnlichen Verwendung erstellt wurde. Die Allgemeine Bibliothek ist die Summe der gängigen und weit verbreiteten Standardmodule, die vorerst als Einzeldatei-Tools oder als Abkürzungen betrachtet werden können, die Dinge möglich oder schneller machen. Die allgemeine Bibliothek ist eine Option, die die meisten Benutzer bei der Installation von Python aktivieren. Da es diesen Namen "Python General Library" hat, wird es häufig mit ähnlichen Strukturen und Ideen verwendet. Witch ist einfach, eine Reihe von Modulen zu haben, vielleicht sogar Pakete, die in einer Liste zusammengefasst sind. Die Liste dient normalerweise zum Herunterladen. Im Allgemeinen handelt es sich nur um verwandte Dateien mit ähnlichen Interessen. Das ist der einfachste Weg, es zu beschreiben.

Modul - Ein Modul bezieht sich auf eine Datei. Die Datei enthält das Skript 'drin' und der Name der Datei ist der Name des Moduls. Python-Dateien enden mit .py. Die Datei enthält lediglich Code, der zusammen ausgeführt wird, um mithilfe von Funktionen, Zeichenfolgen usw. etwas zu bewirken. Hauptmodule, die Sie wahrscheinlich am häufigsten sehen, sind beliebt, da es sich um spezielle Module handelt, die Informationen aus anderen Dateien / Modulen abrufen können. Es ist verwirrend, weil der Name der Datei und des Moduls gleich sind und einfach die .py löschen. Wirklich, es ist nur Code, den Sie als Verknüpfung verwenden können, die von jemandem geschrieben wurde, um etwas einfacher oder möglicher zu machen.

Paket - Dies ist ein Begriff, der im Allgemeinen manchmal verwendet wird, obwohl der Kontext einen Unterschied macht. Aus meiner Erfahrung heraus werden am häufigsten mehrere Module (oder Dateien) verwendet, die zusammen gruppiert sind. Warum sie gruppiert sind, kann verschiedene Gründe haben, dh der Kontext ist wichtig. Auf diese Weise habe ich den Begriff Paket (e) bemerkt.benutzt. Sie sind eine Gruppe von heruntergeladenen, erstellten und / oder gespeicherten Modulen. Was alles wahr sein kann oder nur 1, aber es ist wirklich nur eine Datei, die auf andere Dateien verweist, die in der richtigen Struktur oder im richtigen Format vorliegen müssen, und die gesamte Summe ist das Paket selbst, das installiert ist oder möglicherweise in der Datei enthalten ist Python General Library. Ein Paket kann Module (.py-Dateien) enthalten, da diese voneinander abhängen und manchmal nicht oder überhaupt nicht richtig funktionieren. Es gibt immer ein gemeinsames Ziel für jeden Teil (Modul / Datei) eines Pakets, und die Gesamtsumme aller Teile ist das Paket selbst.

In Python-Paketen handelt es sich meistens um Module, da der Paketname der Name des Moduls ist, mit dem alle Teile verbunden werden. Sie können also ein Paket eingeben, da es sich um ein Modul handelt. Außerdem können andere Module aufgerufen werden, die keine Pakete sind, da sie nur eine bestimmte Funktion ausführen oder die Aufgabe keine anderen Dateien umfasst. Pakete haben ein Ziel und jedes Modul arbeitet zusammen, um dieses endgültige Ziel zu erreichen.

Die größte Verwirrung entsteht durch einen einfachen Dateinamen oder ein Präfix für eine Datei, die als Modulname und dann wieder als Paketname verwendet wird.

Denken Sie daran, dass Module und Pakete installiert werden können. Bibliothek ist normalerweise ein Oberbegriff für das Auflisten oder Formatieren einer Gruppe von Modulen und Paketen. Ähnlich wie die allgemeine Bibliothek von Pythons. Eine Hierarchie würde nicht funktionieren, APIs gehören nicht wirklich dazu, und wenn Sie dies tun würden, könnten sie überall und jede Ware sein, die Skript, Modul und Pakete umfasst. Die Weltbibliothek ist ein so allgemeines Wort, das leicht auf viele Dinge angewendet werden kann, und macht API auch fähig darüber oder darunter sitzen. Einige Module können auf anderem Code basieren, und dies ist meines Erachtens das einzige Mal, dass es sich um eine reine Python-bezogene Diskussion handelt.

Mizat
quelle