hallo forum,
ich habe hier folgendes phänomen. ich programmiere ein kleines modul. in meinem modul existieren klassen. in einem test-skript importiere ich dieses modul und veruche die klasse zu instanzieren. er sagt jedoch, dass diese klasse (oder modulattribute) nicht existiert. kann aber nicht sein, andere klassen die zuvor schon hinzugefügt wurden existieren auch.
kann mir hier jemand weiterhelfen. dachte immer der interpreter händelt das eigenständig sobald sich der quellcode ändert.
viele grüße
chris
erzeugen von .pyc
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Macht er eigentlich auch. Arbeitest du zufaellig mit der IDLE?
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Das passiert, wenn man mit IDLE oder dem interaktiven Interpreter entwickelt. Wenn du Änderungen an einem zu importierenden Modul machst, dann musst du die Module nach jeder Änderung mit "reload" neu laden. Starte daher deine Programm am besten gleich mit "python dein_programm.py".
Das Leben ist wie ein Tennisball.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Wenn du von Shell redest, meinst du die IDLE-Shell oder den interaktiven Python-Modus (also das Ding in der schwarzen DOS-Box?). Ich wuerde dir mal vorschlagen, komplett auf die IDLE und deren Shell zu verzichten.
Ausserdem auf execfile, ich bin mir nicht sicher, ob es Module neu laedt. Ruf einfach dein Script aus der DOS-Box mit python myscript.py auf.
Ausserdem auf execfile, ich bin mir nicht sicher, ob es Module neu laedt. Ruf einfach dein Script aus der DOS-Box mit python myscript.py auf.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
hallo und erstmal dank efür feedback,
ich habe folgendes gemacht.
in der IDLE (also interaktiver Modus) mit "execfile()" gearbeitet. zusätzlich auch ein ein "reload(modulename)". damit klappt das auch. nur kann ich doch nicht jedes modul neu laden.
auf der anderen seite nutze ich die "normale" DOS box. aufruf des interpreten mit
das ist echt zu mäuse melken.
ich schraube hier gerade an einem kleinen plugin-system. das witzige ist auch - passt grad in diesem zusammenhang - das er folgendes macht:
ich erzeuge einfach nur eine liste mit den namen der module (parser) die eingebunden werden sollen. anschließend importiere ich sie und instanziere sie. alle parser erben von einer basisklasse mit den namen "parser" die im selben modul liegt.
anschließend gehe ich mit ran:
was passiert? er gibt mir ein einziges mal eine liste zurück und zwar genau dann wenn ich die idle neu starte.
ich hab heut echt nen brett vorm kopf
vg chris
ich habe folgendes gemacht.
in der IDLE (also interaktiver Modus) mit "execfile()" gearbeitet. zusätzlich auch ein ein "reload(modulename)". damit klappt das auch. nur kann ich doch nicht jedes modul neu laden.
auf der anderen seite nutze ich die "normale" DOS box. aufruf des interpreten mit
im jeweiligen verzeichnis. er macht es auch hier nicht. ich meine die aktualisierungen ohne einen reload()...python meinscriptname.py
das ist echt zu mäuse melken.
ich schraube hier gerade an einem kleinen plugin-system. das witzige ist auch - passt grad in diesem zusammenhang - das er folgendes macht:
Code: Alles auswählen
def __findEngineParsers(self):
"""
collect all engine parsers which are arranged in parsers directory;
inspect
"""
collection = os.listdir(self.__pa_local) # __pa_local = pfad zu den parsermodulen
self.__initEngineParsers(collection)
def __initEngineParsers(self, parsers = []):
"""
adds the engine parsers which was founded in parsers
directory
"""
for parser in parsers:
__import__(parser, None, None, [])
ich erzeuge einfach nur eine liste mit den namen der module (parser) die eingebunden werden sollen. anschließend importiere ich sie und instanziere sie. alle parser erben von einer basisklasse mit den namen "parser" die im selben modul liegt.
anschließend gehe ich mit ran:
Code: Alles auswählen
print parser.__subclasses__()
ich hab heut echt nen brett vorm kopf
vg chris
be or not to be
Wenn du auf der Konsole die Programme mit
startest, dann hast du gar keine Möglichkeit "reload" per Hand aufzurufen. Außer du machst ganz seltsame Dinge. Läuft das Programm vielleicht noch, während du die Änderung machst? Die werden nämlich erst nach einem erneuten Start auch aufgenommen.
Code: Alles auswählen
python dein_script.py
Das Leben ist wie ein Tennisball.
jetzt mal langsam. irgendwie komme ich nicht mit.
ich mache nichts weiter als folgenden.
1.) ipython shell starten.
2.) execfile('meinskript.py')
3.) ausgabe erfolgt
iPython shell bleibt offen, und ich ändere mein skript. anschließend gleiches verfahren wie oben beschrieben. außer ipython neu starten, denn die ist ja schon geöffnet. solls jetzt daran liegen ? muss ich jedes mal den interpreten neu starten? wie soll ich dann entwickeln?
andere möglichkeit war ja eben über den befehl
wird denn python nach einem
vg chris
ich mache nichts weiter als folgenden.
1.) ipython shell starten.
2.) execfile('meinskript.py')
3.) ausgabe erfolgt
iPython shell bleibt offen, und ich ändere mein skript. anschließend gleiches verfahren wie oben beschrieben. außer ipython neu starten, denn die ist ja schon geöffnet. solls jetzt daran liegen ? muss ich jedes mal den interpreten neu starten? wie soll ich dann entwickeln?
andere möglichkeit war ja eben über den befehl
auf der einfachen dos eingabebox zu gehen. das dann kein reload erfolgt ist mir klar! den brauch ich ja hier nicht, da das programm ja nur einmal ausgeführt wird. das programm ist auch kein persistentes, also abbruch über key input.python mein_skript.py
wird denn python nach einem
nicht beendet?python mein_skript.py
vg chris
be or not to be
Ja, es liegt daran, dass du den ersten Schritt beim erneuten laden übergehst. Im interaktiven Interpreter bleiben alle Name erhalten und geladene Module werden nicht noch einmal geladen.
Mit
wird der Interpreter jedes Mal neu gestartet und alle Module neu geladen. Daher sollte es damit auch funktionieren. Kopiere sonst mal die Ausgaben vom Start des Scripts bis zu dessen Ende.
Mit
Code: Alles auswählen
python mein_skript.py
Das Leben ist wie ein Tennisball.
faszinierend...
in der ipython shell funzt das programm (auch nach neustart) aber auf der dos eingabebox (python meinskript.py) nicht! es wird immer wirrer!
man kann übrigens mit
damit funzt wenigstens das reloaden auf global.
danke für eure beiträge zur problem beseitigung.
vg chris
in der ipython shell funzt das programm (auch nach neustart) aber auf der dos eingabebox (python meinskript.py) nicht! es wird immer wirrer!
man kann übrigens mit
auf der ipython shell die namespaces killen!%reset
damit funzt wenigstens das reloaden auf global.
danke für eure beiträge zur problem beseitigung.
vg chris
be or not to be
moin moin...
jepp nach langem suchen kann ich sagen warum es immer zu einem derartigen verhalten kam. es lag schlicht weg eine "alte" kopie in einem verzeichnis in dem auch meine aufgerufene "test-datei" lag...
toll 2 tage habe ich gesucht! aber wir üben ja noch!
*lol
grüße chris
jepp nach langem suchen kann ich sagen warum es immer zu einem derartigen verhalten kam. es lag schlicht weg eine "alte" kopie in einem verzeichnis in dem auch meine aufgerufene "test-datei" lag...
toll 2 tage habe ich gesucht! aber wir üben ja noch!
*lol
grüße chris
be or not to be