Max Most: Python: Verständnisprobleme mit import/__init__.py

Beitrag lesen

Nabend, die Herren,

ich habe, wie der Titel sagt, leichte Verständnisprobleme mit dem Import-System in Python. Angenommen eine Dateistruktur wie die folgende:

foo.py
bar/
    __init__.py
    baz.py
    boo.py

Die init.py enthält sowas wie:

from baz import *
from boo import *

Und bar/baz.py enthält:

__all__ = ["how_cool"]

def how_cool():
    return -273.15

Was ich erwarten würde, und hier liege ich offensichtlich falsch, ist, daß ich in foo.py folgendes schreiben kann:

import bar

print(bar.how_cool())

Was ich tatsächlich bekomme, ist: ImportError: No module named 'baz', und zwar in der init.py. Nun könnte ich die init.py leeren und in foo.py sowas schreiben wie:

import bar.baz

print(bar.baz.how_cool())

Aber damit kann ich ehrlich gesagt nicht leben. Simple Funktionsaufrufe wären mir zu lang (module.submodule1.do_something(module.submodule2.get_data())), circular imports würden mir vermutlich das Leben erschweren, und überhaupt, ich scheine hier etwas nicht zu verstehen. Was ich möchte, ist, einen Haufen an Funktionen o. ä. in einen Ordner zu schmeißen und die dann in einem Namespace zusammengefaßt haben. Halt als package.do_something(), selbst wenn "package" eine Reihe an Dateien oder sogar Unterordnern mit Dateien umfaßt. Wäre für jeden Denkanstoß dankbar.

Danke vorab, Max