@snafu: Das ist alles viel zu viel Magie. Das heraufhangeln des Framestack zum Beispiel sollte nicht in Produktivcode verwendet werden. Es gibt auch eine entsprechende Warnung im Docstring der Funktion. Das ist was für die Fehlersuche oder wenn man einen Debugger schreiben will.
Vom ersten mal importieren habe ich immer gesprochen weil Du *ursprünglich* wissen wolltest von wo Dein Modul importiert wird. Der Quelltext im Modul wird aber nur ausgeführt, wenn es *das erste mal* importiert wird. Jetzt hast Du Deine Anforderungen plötzlich geändert und möchtest wissen von welchem Modul aus eine Funktion aufgerufen wird. Das ist ja nun etwas anderes, weil man das natürlich öfter machen kann. Aber wie gesagt nicht sollte.
Und es funktioniert halt einfach nicht. Beispiel: Das Modul `spam` existiert nicht:
Code: Alles auswählen
import modcheck, sys
missing = modcheck.check_file(check_caller=True)
if missing:
print '...'
import spam, eggs
In der ersten Zeile wird Dein `modcheck` importiert. Dann wird die `check_file()`-Funktion aufgerufen, die das aufrufende Modul importiert. Da das *der zweite* ``import``ist , passiert gar nix. Wenn die `check_file()` zurück kehrt kommen wir nach dem ``if`` zum ``import spam, eggs`` und da kracht es dann ganz normal, also so wie Du das nicht haben möchtest, und ohne das Dein Modul irgend etwas gebracht hätte.
Mir ist aber auch nicht ganz klar wie Du in der `check_file()` mehr als einen Importfehler erkennen können willst!? Denn auch da könntest Du mit einem ``except ImportError`` ja nur den ersten Fehler abfangen.