it-swarm.com.de

Single python Dateiverteilung: Modul oder Paket?

Angenommen, ich habe eine nützliche python - Funktion oder Klasse (oder was auch immer) namens useful_thing, Die in einer einzelnen Datei vorhanden ist. Es gibt im Wesentlichen zwei Möglichkeiten, den Quellbaum zu organisieren. Die erste Möglichkeit verwendet ein einzelnes Modul:

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

wobei useful_thing in foo.py definiert ist. Die zweite Strategie besteht darin, ein Paket zu erstellen:

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

wobei useful_thing in module.py definiert ist. Im Paketfall würde __init__.py So aussehen

from foo.module import useful_thing

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

Frage : Welcher Weg wird bevorzugt und warum?

BEARBEITEN: Da Benutzer Mücke sagt, dass diese Frage schlecht formuliert ist, möchte ich hinzufügen, dass das offizielle python Packaging-Tutorial nicht zu kommentieren scheint, welche der oben beschriebenen Methoden die bevorzugte ist. Ich bin explizit nicht meine persönliche Liste der Vor- und Nachteile angeben, da ich daran interessiert bin, ob es eine von der Community bevorzugte Methode gibt, ohne eine Diskussion über Vor- und Nachteile zu generieren :) :)

25
DanielSank

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

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

Die Module json und unittest in der Standardbibliothek Python Standardbibliothek sind wirklich Pakete, zum Beispiel für Zwecke der Codeorganisation. Es ist jedoch vollkommen in Ordnung, den Code aktuell zu belassen in nur einer python Datei, als ein Modul.

Wenn Sie Beispiele möchten:

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.

20
Martijn Pieters