Problem bei Modularisierung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
localboy
User
Beiträge: 2
Registriert: Freitag 25. Mai 2012, 10:48

Hallo zusammen,

ich hoffe, dass ich hier mit meiner Frage richtig bin. Aber zunächst einmal kurz die allgemeinen Infos: Ich benutze Python 3.2.3 auf einem Mac und in Verbindung mit Blender. Ich bin was Python angeht noch ein ziemlicher Anfänger und habe einige Probleme bei der Modularisierung.

Ich habe es soweit schon hinbekommen, dass ich ein Hauptskript habe, in dem ich die von mir angelegten Module importiere. Das funktioniert soweit auch alles sehr gut. Mein Problem ist nun, dass ich beispielsweise in Modul A auf eine Funktion in Modul B zugreifen muss. Bisher musste ich dafür das Modul A erneut im Modul B importieren. Dies ist insbesondere problematisch, da ich dafür den Pfad zu den Untermodulen benötige.

Bisher konnte ich das ganze nur so lösen, dass ich in jedem Modul den Pfad manuell definiert habe. Das ganze ist natürlich alles andere als praktisch wenn sich dieser Pfad ändert.

Leider bin ich mir auch nach langer Google-Suche nicht sicher, wie ich mein Problem am sinnvollsten lösen kann. Ich hatte erst überlegt den Speicherort der Skripte auszulesen, um mir die manuelle Pfadeingabe zu ersparen. Dabei stoße ich aber, unabhängig von der Methode, auf das Problem, das mir lediglich der Pfad zu Blender zurückgegeben wird, und nicht der zum ursprünglichen Speicherort der Skripte.

Alternativ wäre es auch sehr praktisch wenn ich die Module lediglich in meinem Hauptskript importieren müsste und deren Funktionen dann auch in allen anderen importierten Modulen verfügbar sind. Ich bin mir aber nicht sicher, ob sowas in der Art überhaupt möglich ist. :oops:

Ich würde mich sehr über ein paar Anregungen und Hilfestellungen freuen und bitte meine laienhafte Beschreibung des Problems zu entschuldigen.

Vielen Dank schon einmal im Voraus für jegliche Hilfe und dieses tolle Forum im Allgemeinen! :D

Viele Grüße,
Simon
BlackJack

@localboy: Wenn man in einem Modul A etwas aus einem anderen Modul B benutzen möchte, dann muss man das Modul importieren. So etwas wie „ich importiere etwas und das ist einfach so *überall* verfügbar” ist nicht der vorgesehene Weg. Würde auch die Idee von Modularisierung irgendwo sinnfrei machen.

Warum Du den Pfad für jedes Modul benötigst, ist mir nicht klar‽ Du verstreust die Module doch nicht beliebig in der Verzeichnishierarchie, oder? Du legst die entweder in einem Verzeichnis ab, das in `sys.path` schon enthalten ist, oder Du fügst in Deinem Hauptskript einen solchen Pfad dort ein, am besten speicherst Du die Module relativ zum Hauptskript. Wo das Hauptskript liegt, solltest Du über `__file__` in dem Modul heraus finden können. Wenn Du mehrere Module hast, die thematisch zusammen gehören, könntest Du sie auch in einem Package zusammen fassen. Dann bist Du mit der Namenswahl freier, weil nur der Package-Name kollisionsfrei zum Rest sein muss.
localboy
User
Beiträge: 2
Registriert: Freitag 25. Mai 2012, 10:48

Vielen Dank, manchmal sieht man vor lauter Wald die Bäume nicht mehr :oops:

Ich bin aus irgendeinem Grund nicht darauf gekommen, dass ich auch in meinen Untermodulen auf die Pfade in sys.path zugreifen kann und die manuelle Übergabe der Pfade im Endeffekt überflüssig war. Danke für die schnelle Hilfe und gute Erklärung selbst bei solch "dummen" Fragen! Der Tip mit den Paketen klingt auch sehr hilfreich, das werde ich mir mal genauer anschauen.
Antworten