Seite 1 von 1
Eigene Module einzubinden, klappt nicht
Verfasst: Montag 19. Oktober 2009, 11:01
von Gab
Hallo, allerseits,
ich versuche gerade, aus meinen Scripts eine eigene Bibliothek aufzubauen, die alle Module enthält, die ich immer wieder brauche.
Folgendes habe ich gemacht:
Verzeichnis angelegt \gab\ in das Verzeichnis, in dem der Hauptscript liegt.
In dieses Verzeichnis eine __init__.py angelegt
Verzeichnis \gab\test\ angelegt.
In dieses Verzeichnis eine __init__.py angelegt
Und eine Datei aufruf.py angelegt mit entsprechendem Code.
Wenn ich nun im eigentlichen Script folgendes mache:
erhalte ich die Fehlermeldung
'module' object has no attribute 'aufruf'
Was ist der Fehler?
Danke
Gab
Verfasst: Montag 19. Oktober 2009, 11:38
von ms4py
Funktioniert das auch nicht?
Du kannst ein Modul nicht als Funktion aufrufen, allerdings scheint das nicht das Problem zu sein?!
Verfasst: Montag 19. Oktober 2009, 11:39
von Hyperion
Bei Deiner Beschreibung sollte es so gehen:
Verfasst: Montag 19. Oktober 2009, 12:31
von Gab
Nichts von beidem geht.
import gab.test.aufruf
gibt die gleiche Fehlermeldung aus.
Weitere Frage:
Das Modul aufruf.py beinhaltet den Code der früheren Funktion ohne
Korrekt?
Gab
Verfasst: Montag 19. Oktober 2009, 12:36
von Hyperion
Gab hat geschrieben:Nichts von beidem geht.
Was kommt denn als Meldung?
Wo liegt denn das Script, welches den import beinhaltet? Direkt oberhalb von gab? Oder steht das Modul im Suchpfad?
Verfasst: Montag 19. Oktober 2009, 12:49
von Gab
Die Meldung:
ImportError: No module named aufruf
Verzeichnisbaum:
- \haupt
script.py
\haupt\gab
__init__.py
\haupt\gab\test
__init__.py
aufruf.py
Verfasst: Montag 19. Oktober 2009, 12:54
von Zap
Gab hat geschrieben:Nichts von beidem geht.
import gab.test.aufruf
gibt die gleiche Fehlermeldung aus.
Weitere Frage:
Das Modul aufruf.py beinhaltet den Code der früheren Funktion ohne
Korrekt?
Gab
Nein das ist nicht korrekt. Ein Modul kann nicht als Funktion implementiert werden. In der Regel hat mein ein Modul, also eine .py Datei in der mehrere Funtkionen, Classen usw implementiert sind.
Python erlaubt es auch nicht das ein Modul "aufgerufen" werden kann.
Vielleicht hilft folgender Code um deinem Problem auf die Schliche zu kommen
Code: Alles auswählen
import gab
print "modul gab:", gab.__file__
from gab import test
print "modul test:", test.__file__
Vielleicht werden ja garnicht die Dateien importiert die du erwartest.
Edit: Nachdem ich jetzt den Verzeichnisbaum gesehen habe, glaube ich nicht das da der Fehler liegt.
Verfasst: Montag 19. Oktober 2009, 13:00
von Hyperion
Gab hat geschrieben:Die Meldung:
ImportError: No module named aufruf
Verzeichnisbaum:
- \haupt
script.py
\haupt\gab
__init__.py
\haupt\gab\test
__init__.py
aufruf.py
Dann muss das folgende doch klappen!
Code: Alles auswählen
import gab.test.aufruf
# wie auch immer eine Funktion bei dir heißt.
gab.test.aufruf.funktion()
Verfasst: Montag 19. Oktober 2009, 13:01
von Gab
Es werden jeweils die __init__.py angegeben.
Was mich nun verwirrt:
Der Aufruf
xy = Gab.test
funktioniert.
Verfasst: Montag 19. Oktober 2009, 13:02
von Zap
Ich habe das ganze mal eben lokal durchgespielt und diese Varianten funktionieren:
Code: Alles auswählen
from gab import test
from gab.test import aufruf
print test.aufruf.__file__
print aufruf.__file__
Diese Version hingegen funktioniert tatsächlich nicht, ein Verhalten mit dem ich micht noch nicht näher beschäftigt habe.
Verfasst: Montag 19. Oktober 2009, 13:22
von Hyperion
So, mir reicht's jetzt
Ich habe das auch mal lokal getestet:
Mit der bar.py
Und dann script.py
Als Ergebnis kommt natürlich das "Toll!".
Du machst def. etwas anders, als Du es hier angibst. Evtl. stimmt die __init__.py nicht? (Unterstrich vergessen?) Oder Dir fehlen Schreib- / Leserechte?
Verfasst: Montag 19. Oktober 2009, 13:42
von Gab
Welche Schreib-/Leserechte braucht es denn?
Die Scripterei liegt auf einem externen Laufwerk. Dort funzt es nicht. Wenn ich's lokal bei mir baue, funzst es!
Verfasst: Montag 19. Oktober 2009, 14:17
von Hyperion
Gab hat geschrieben:Welche Schreib-/Leserechte braucht es denn?
Die Scripterei liegt auf einem externen Laufwerk. Dort funzt es nicht. Wenn ich's lokal bei mir baue, funzst es!
Das wäre natürlich mal eine wichtige Info gewesen
Naja, der Python-Interpreter muss Leserechte auf den Verzeichnissen haben. Das hat er offenbar nicht. Du kannst das ja mal testen mit den os / os.path Funktionen.