Modul vs. Paket?

140

Wann immer ich das tue, habe from 'x' import 'y'ich mich gefragt, welches das "Modul" und welches das "Paket" ist und warum es nicht umgekehrt ist?

Dunkler Templer
quelle
1
Informationen dazu, warum es nicht umgekehrt ist, finden Sie unter stackoverflow.com/questions/3600352/…
1
Ich bin dankbar für diese Frage, denn die Antwort ist prägnant und gibt genau das benötigte Wissen. Die Dokumentation ist alles in Ordnung und gut, aber sie ist ausführlich und enthält viel mehr Informationen, als das OP verlangt hat, und sicherlich mehr, als ich brauchte. Ich wollte nur eine Antwort auf diese spezielle Frage, und die Antwort unten ist genau das, was ich wollte. Viele von uns brauchen einfach keine solchen formellen oder tiefgehenden Antworten.
Teekin
Ein verwandtes Konzept zu wissen - Klassen vs. Module in Python
RBT

Antworten:

192

Ein Python-Modul ist einfach eine Python-Quelldatei, mit der Klassen, Funktionen und globale Variablen verfügbar gemacht werden können.

Beim Importieren aus einer anderen Python-Quelldatei wird der Dateiname als Namespace behandelt.

Ein Python-Paket ist einfach ein Verzeichnis von Python-Modulen.

Stellen Sie sich zum Beispiel den folgenden Verzeichnisbaum in vor /usr/lib/python/site-packages:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

Dann würden Sie tun:

import mypackage.mymodule

oder

from mypackage.mymodule import myclass
Yam Marcovic
quelle
Aha, wenn du also sagst, dass der Dateiname als Namespace behandelt wird, würdest du so etwas tun? "mymodule.var1" für den ersten Fall oder "myclass.var1" für den zweiten?
Dunkler Templer
1
Nicht genau. Das Paket zählt weiterhin als Teil des Namespaces. Wenn Sie das tun möchten, was Sie gesagt haben, müssen Sie mypackage import mymodule verwenden.
Yam Marcovic
Es kann nützlich sein, etwas über Namespace-Pakete hinzuzufügen, für die der Code nicht unbedingt alle in derselben Verzeichnisstruktur angezeigt werden muss.
Holdenweb
@holdenweb Nie die verschiedenen Mechanismen direkt genutzt, also kein Experte. Wenn Sie in einer neuen Antwort eine ausführliche Erklärung dazu geben, verweise ich von mir darauf.
Yam Marcovic
Wahrscheinlich ein bisschen zu esoterisch, um es wert zu sein, im Nachhinein
holdenweb