Ich bin der Maintainer von Pythons Runpy-Modul und einer der Maintainer des aktuellen Importsystems. Obwohl unser Importsystem beeindruckend flexibel ist, würde ich davon abraten, es im Großhandel zu übernehmen, ohne ein paar Änderungen vorzunehmen. Aufgrund von Problemen mit der Abwärtskompatibilität gibt es eine Reihe von Dingen, die umständlicher sind, als sie ansonsten sein müssten.
Eine Sache, die bei PEP 302 in Python wehgetan hat, ist, wie lange es gedauert hat, das Kernimportsystem auf die Verwendung umzustellen. Für den größten Teil eines Jahrzehnts steckte jeder, der irgendetwas Komplexes mit Import-Hooks macht, fest, indem er zwei Teile implementierte: einen, der PEP 302-konforme Loader (wie Zip-Importe) handhabt, und einen zweiten, der den Standard-Importmechanismus auf Dateisystembasis handhabt. Erst in der kommenden Version 3.3 kümmert sich der Umgang mit PEP 302-Ladern auch um den Umgang mit Modulen, die über den Standard-Dateisystem-Importmechanismus importiert wurden. Versuchen Sie, diesen Fehler nicht zu wiederholen, wenn Sie ihn möglicherweise vermeiden können.
PEP 420 (für Python 3.3 implementiert) nimmt einige Ergänzungen zum Protokoll vor, damit Importeure Teile zu Namespace-Paketen beisteuern können. Es behebt auch ein Namensproblem in der Finder-API-Definition (wodurch das falsch benannte "find_module" durch das genauere "find_loader" ersetzt wird). Dies sollte hoffentlich alles klarer in der Sprachspezifikation dokumentiert sein, wenn 3.3rc1 in ein paar Wochen erscheint.
Ein weiteres bemerkenswertes Problem besteht darin, dass der in PEP 302 spezifisch dokumentierte Ansatz einen viel zu hohen globalen Prozessstatus aufweist. Folgen Sie uns nicht auf diesem Weg - versuchen Sie, den Zustand in einem kohärenteren Objektmodell zu kapseln, damit es ein wenig einfacher ist, andere Module selektiv zu importieren (C-Erweiterungsmodule sind der Fluch, um eine solche Kapselung vollständig wirksam zu machen, aber auch auf einer bestimmten Ebene der Kapselung kann hilfreich sein).
In PEP 406 (http://www.python.org/dev/peps/pep-0406/) wird eine mögliche rückwärtskompatible Weiterentwicklung des Python-Ansatzes mit verbesserter Statuskapselung erörtert. Wenn Sie jedoch von Anfang an über ein gekapseltes Statusmodell verfügen, können Sie Ihre APIs entsprechend definieren und vermeiden, dass Importer und Loader überhaupt auf den globalen Status zugreifen (stattdessen wird ein Verweis auf die aktive Engine übergeben).
Ein weiteres fehlendes Element in PEP 302 ist die Möglichkeit, einen Importeur nach einem Iterator für die von diesem Importeur bereitgestellten Module zu fragen (dies ist beispielsweise für Freeze-Dienstprogramme und Dienstprogramme für die automatische Dokumentation erforderlich, mit denen Docstrings extrahiert werden). Da es unglaublich nützlich ist, ist es wahrscheinlich besser, es von Anfang an zu standardisieren: http://docs.python.org/dev/library/pkgutil#pkgutil.iter_modules (wir werden es wahrscheinlich endgültig zu einem formal festgelegten Modul machen) API in Python 3.4)
Und mein letzter Kommentar ist, dass Sie sich die Aufteilung der Zuständigkeiten zwischen dem Importsystem und den Ladeobjekten genauer ansehen sollten. Erwägen Sie insbesondere, die API "load_module" in separate Schritte "init_module" und "exec_module" zu unterteilen. Dies sollte es Ihnen ermöglichen, das Ausmaß zu minimieren, in dem Lader direkt mit dem Importstatus interagieren müssen.
PEP 302 und importlib sind ein guter Ausgangspunkt für ein flexibleres Importsystem, aber es gibt definitiv Fehler, die wir gemacht haben und die es wert sind, vermieden zu werden.