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.
So solltest du das auch nicht machen. Du bewegst dich mit diesem import ja quasi aus der definierten Hierarchie heraus in ein "unbekanntes" Verzeichnis. Die Pakete koennte ja zB in verschiedenen EGGs liegen etc. Da gibt es keine Garantien, wie die zueinander liegen.
Stattdessen solltest du "from mypackage import ..." oder aehnliches machen.
Falls die beiden eng zusammengehoeren, sollten sie eh einfach in eine Pakethierarchie gesteckt werden, also einfach noch eine Ebene drueber:
__deets__ hat geschrieben:So solltest du das auch nicht machen. Du bewegst dich mit diesem import ja quasi aus der definierten Hierarchie heraus in ein "unbekanntes" Verzeichnis. Die Pakete koennte ja zB in verschiedenen EGGs liegen etc. Da gibt es keine Garantien, wie die zueinander liegen.
Stattdessen solltest du "from mypackage import ..." oder aehnliches machen.
Falls die beiden eng zusammengehoeren, sollten sie eh einfach in eine Pakethierarchie gesteckt werden, also einfach noch eine Ebene drueber:
Ich habe das nie versucht, und ob dieses alte Buch das jetzt richtig beschreibt weiss ich nicht. Bzw. ob du dich da richtig erinnerst. Da muesstest du das schon vorlegen, damit man das mal beurteilen kann.
Ganz generell gilt: diese Art zu importieren hat zwar gewisse Aehnlichkeiten mit der Navigation in einem Filesystem, ist aber *kein* ersatz dafuer. Genausowenig wie du "from c:/foo/bar/baz import x" machen kannst. Python-Pakete und Module werden immer relativ zu den Eintraegen in sys.path interpretiert.
Als ich dann die Nase voll hatte, bin ich bei dieser Variante gelandet und finde die bislang nicht schlecht. Wenn das nicht unbedingt eine Package werden soll, müsste das zur Laufzeit eigentlich genügen? Oder?
Funktioniert zumindest.
base = os.path.dirname(__file__)
sys.path.append(os.path.join(base, "foo"))
Im konkreten Beispiel von dir verstehe ich nicht, warum du zwei Pfade hinzufuegst, statt dann einfach "werkzeuge" und "szenen" als Paketenamen zu nutzen.
Das mit os.path.dirname(__file__) werde ich mal testen, bisher habe ich da noch keinen Unterschied gesehen. Bei Verknüpfungen auf dem Desktop verknüpfte ich bisher auf Datei und bei Suchscript oder beim Öffnen und Speichern von Dateien stimmte es bisher. Das jetzige Verzeichnis habe ich heute getrennt und nun sieht es bislang so aus. Doch wenn das mit os.path.dirname(__file__) zuverlässiger ist, dann werde ich das ändern, weil ich es später einmal veröffentlichen möchte.
Da jede Szene im Schnitt nicht länger als 20 bis 40 Sekunden werden dürfte und jede ihr eigenes kleines "Drehbuch" erhält, könnte da schon einiges mit der Zeit zusammenkommen und die sollten halt "abseits" liegen und bearbeitbar bleiben. Und bei den Funktionen bin ich mir noch nicht sicher, was da alles noch zusammen kommen könnte.
Hatte lange überlegt, wie ich da die Einstellungen für jedes Objekt übernehmen könnte und das eine war so umständlich wie das andere. Zwischendurch war ich dann mal soweit, dass ich für jede Szene die Einstellungen in einer Datenbank speichern wollte, doch die müssten ja vorher auch geschrieben werden.
Nun mache ich es ähnlich wie in Gimp, rufe entsprechend der Szene eine Funktion nach der anderen auf und wenn es gut ist, wird die Datei als szene_xy.py gespeichert und die nächste kann begonnen werden.
Eigentlich ging es mir ja nur darum, dass es halt auch eine Variante ist, auf verschachtele Verzeichnisse zuzugreifen, wenn es denn genügt.
Habe heute noch einmal einiges durchgelesen. Jetzt habe ich den Unterschied begriffen, denke ich zumindest, weil beide Varianten soweit erst einmal funktionieren. Und ich dachte man müsste in den Verzeichnissen auch noch eine __init__.py ablegen und bin dann zusätzlich noch durch diese unterschiedliche Schreibweise bei Importen durcheinander gekommen.