[PYTHON] Lassen Sie __init__.py nicht aus

Viele Leute sind bereit, "__init __. Py" in Python 3.3 wegzulassen, aber ** nicht. ** ** **

Warum das Missverständnis passiert ist

Ab Python 3.3 wurde das implizite Namespace-Paket unter PEP 420 hinzugefügt.

** Das Namespace-Paket ist kein normales Paket. ** Es ist ein besonderer Zweck, und für die meisten Menschen ** müssen Sie nicht einmal wissen **.

Wenn Sie es wirklich wissen möchten, lesen Sie PEP 420 oben und den Verpackungsleitfaden.

Die schädliche Wirkung des Weglassens von "__init __. Py"

Der Missbrauch des impliziten Namespace-Pakets mit einem regulären Paket ist schädlich.

Import ist langsam

Da es sich von einem normalen Paket unterscheidet, kann der Import langsam sein, um das Modul im Paket zu finden. Auch wenn die Wahrscheinlichkeit gering ist, kann es aufgrund der unterschiedlichen Suchreihenfolge zu Problemen kommen.

Tool unterstützt nicht

Beispielsweise sucht die Funktion, die automatisch nach einem Testmodul mit unittest in der Standardbibliothek sucht, nicht in einem Verzeichnis, das nicht "__init __. Py" enthält. (Siehe https://bugs.python.org/issue29642)

** Wenn Sie dies versuchen, müssen Sie rekursiv alle Verzeichnisse durchsuchen, die nicht über "__init __. Py" verfügen. Dieses Verzeichnis ist node_modules und kann Hunderttausende von Dateien und Verzeichnissen enthalten. Wie langsam wäre es, wenn das Verzeichnis im Netzwerk bereitgestellt würde? ** ** **

Solche Verlangsamungen sind für Benutzer, die das implizite Namespace-Paket als reguläres Paket missbrauchen, einfach nicht akzeptabel **. ** ** **

Erwarten Sie aus dem gleichen Grund nicht, dass Tools wie lint automatisch nach Paketen und Modulen suchen können, um nach impliziten Namespace-Paketen zu suchen.

Möglicherweise gibt es Tools, die Anfragen annehmen und beantworten, ohne den Hintergrund zu kennen, aber keine Probleme senden oder Anfragen abrufen, die "sollte antworten" oder "antworten" sagen, da dies für Betreuer und andere Benutzer ärgerlich ist. ..

Recommended Posts

Lassen Sie __init__.py nicht aus
Wechseln Sie nicht mit pyenv global!
[Matplotlib] Kippen Sie die Achsenbeschriftung nicht