Wenn Sie ein Paket erstellen möchten, müssen Sie verstehen, wie Python übersetzt Dateinamen zu Modulnamen.
Die Datei mymodule.py
ist als mymodule
verfügbar, vorausgesetzt, der Interpreter findet sie in einem Verzeichnis im Python-Suchpfad. Wenn Sie ein Dateisystem verwenden, bei dem die Groß-/Kleinschreibung nicht berücksichtigt wird, kann es möglicherweise auch mit einer anderen Groß-/Kleinschreibung importiert werden (Sie sollten jedoch ein solches systemabhängiges Verhalten vermeiden).
Ein Paket ist ein Verzeichnis mit einer __init__.py
Datei darin. Es hat in letzter Zeit einige Bewegungen gegeben, Pakete ohne diese Dateien zuzulassen, aber ich werde diesen weniger häufigen Fall für diese Antwort ignorieren. Ein Paket wird zu einem Modul in Python, dessen Code aus der Datei __init__.py
stammt. So kann die Datei mypackage/__init__.py
als mypackage
importiert werden.
Es gibt keine Bedeutung für eine __init__.py
Datei direkt im Python-Suchpfad (naja, ich nehme an, Sie könnten es importieren ein __init__
-Modul, aber das ist wahrscheinlich eine schlechte Idee).
Also, für Ihre Situation, hier ist das entsprechende Dateisystem-Layout:
toplevel/
mymodule/
__init__.py # put code here for mymodule
submodule.py # put code here for mymodule.submodule
Nur die toplevel
Ordner in dem Python-Suchpfad sein sollten.
Ich habe gesehen, dass Python-Leute davon abraten, signifikanten Code in 'mymodule/__ init __. Py' zu legen, obwohl z. [Alex Martelli] (http://stackoverflow.com/a/2361278/188535), die damit im Widerspruch zu stehen scheint. (Nicht dass ich das unbedingt stimme ...) – detly
Das stimmt. Ein beliebterer Stil wäre es, den eigentlichen Code für "meinModul" in ein undokumentiertes Submodul zu schreiben und dann die öffentliche API dafür in "__init __. Py" zu importieren. – Blckknght
danke für informative antwort. Es ist schade, dass Python solche schmutzigen Hacks benötigt, um eine offensichtliche Sache zu tun. –