Einzelne Python-Dateiverteilung: Modul oder Paket?

24

Angenommen, ich habe eine nützliche Python-Funktion oder Klasse (oder was auch immer), useful_thingdie in einer einzelnen Datei existiert. Es gibt im Wesentlichen zwei Möglichkeiten, den Quellbaum zu organisieren. Der erste Weg verwendet ein einzelnes Modul:

- setup.py
- README.rst
- ...etc...
- foo.py

wo useful_thingist in definiert foo.py. Die zweite Strategie besteht darin, ein Paket zu erstellen:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

wo useful_thingist in definiert module.py. Im Paketfall __init__.pywürde das so aussehen

from foo.module import useful_thing

so dass Sie in beiden Fällen tun können from foo import useful_thing.

Frage: Welcher Weg wird bevorzugt und warum?

BEARBEITEN: Da Benutzer gnat sagt, dass diese Frage schlecht formuliert ist, möchte ich hinzufügen, dass das offizielle Python-Paket-Tutorial nicht zu kommentieren scheint, welche der oben beschriebenen Methoden die bevorzugte ist. Ich gebe ausdrücklich nicht meine persönliche Liste der Vor- und Nachteile an, weil ich daran interessiert bin, ob es eine von der Community bevorzugte Methode gibt, und keine Diskussion über Vor- und Nachteile generiere :)

DanielSank
quelle
Das Teilen Ihrer Forschung hilft allen . Sagen Sie uns, was Sie versucht haben und warum es nicht Ihren Bedürfnissen entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen, es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. Siehe auch Wie man fragt
Mücke
1
@gnat: Danke für den Link zum Fragen. Ich bin mir der guten Fragestellungspraxis bewusst, aber in diesem Fall hielt ich es nicht für angebracht, meine Erfahrungen zu machen, da dies wahrscheinlich aus meiner klaren A- oder B-Frage eine Aufforderung zur Stellungnahme machen würde. Wie würden Sie empfehlen, diese Frage zu verbessern, ohne sie auf Grundlage Ihrer Meinung zu erstellen?
DanielSank
@gnat: Mit anderen Worten, wenn ich an einer Liste der Vor- und Nachteile der beiden Methoden interessiert wäre, hätte ich gefragt, was die Vor- und Nachteile dieser beiden Methoden sind, und hätte meine eigene Teilliste aufgenommen.
DanielSank

Antworten:

17

Sie tun das Einfachste, was für Sie funktioniert .

Für einen Funktionsbaustein ist es absolut sinnlos, ein Paket zu erstellen. Pakete sind nützlich, um einen zusätzlichen Namespace zu erstellen und / oder Ihren Code über mehrere Module zu organisieren.

Die jsonund unittest-Module in der Python-Standardbibliothek sind wirklich Pakete, zum Beispiel für Code-Organisationszwecke. Es ist jedoch völlig in Ordnung, Code, der sich derzeit in nur einer Python-Datei befindet, als ein Modul zu belassen.

Wenn Sie Beispiele wünschen:

Ein gutes Beispiel für Projekte, bei denen Pakete wirklich hervorragend genutzt werden, finden Sie unter:

Es gibt keine "offizielle" Empfehlung. Beide Optionen sind vollständig gültig.

Martijn Pieters
quelle
Es gibt also keine offiziell bevorzugte Methode?
DanielSank
3
Nein, es gibt keine bevorzugte Methode.
Martijn Pieters