Import unterschiedlicher Module zur Laufzeit
Verfasst: Donnerstag 26. April 2007, 14:19
Hallo,
folgendes Problem: Ich habe auf zwei Rechnern unterschiedliche sqlite-Module zur Verfügung. Mein Programm soll auf beiden Rechnern laufen. Da sich beide Module an die dbapi halten, kommt das Programm auch mit beiden klar. Die Import-Anweisungen sehen bisher so aus:
Bisher funktioniert das natürlich nur, indem ich eines der beiden nicht auskommentiere. Jetzt möchte ich gerne, dass zur Runtime festgestellt wird, welches der beiden Module importiert werden kann. Mein Ansatz war folgender:
Nun meine Fragen dazu:
(1) Wie stelle ich fest, ob ein bestimmtes Modul verfügbar ist zum importieren? (Ich habe gesehen, dass import-Fehler mittels try-except abgefangen werden können. Aber eine try-except-Verschachtelung, bis das richtige Modul gefunden ist, fände ich sehr unschön, oder?)
(2) Wie müssen die import-Anweisungen richtig lauten, um das gleiche Ergebnis wie im ersten Beispiel zu erhalten? __import__ scheint der richtige Weg zu sein, aber ich erhalte ein anderes Ergebnis als im ersten Besipiel.
Vorab schon mal vielen Dank für jegliche Hilfe...
folgendes Problem: Ich habe auf zwei Rechnern unterschiedliche sqlite-Module zur Verfügung. Mein Programm soll auf beiden Rechnern laufen. Da sich beide Module an die dbapi halten, kommt das Programm auch mit beiden klar. Die Import-Anweisungen sehen bisher so aus:
Code: Alles auswählen
#from pysqlite2 import dbapi2 as sqlite
#import sqlite3 as sqlite
Code: Alles auswählen
#sqlite = None
#if module1exists:
# sqlite = __import__('sqlite3', globals(), locals(), [])
#elif module2exists:
# sqlite = __import__('pysqlite2', globals(), locals(), ['dbapi2'])
(1) Wie stelle ich fest, ob ein bestimmtes Modul verfügbar ist zum importieren? (Ich habe gesehen, dass import-Fehler mittels try-except abgefangen werden können. Aber eine try-except-Verschachtelung, bis das richtige Modul gefunden ist, fände ich sehr unschön, oder?)
(2) Wie müssen die import-Anweisungen richtig lauten, um das gleiche Ergebnis wie im ersten Beispiel zu erhalten? __import__ scheint der richtige Weg zu sein, aber ich erhalte ein anderes Ergebnis als im ersten Besipiel.
Vorab schon mal vielen Dank für jegliche Hilfe...