[Python-Dev] Write All New Import Hooks (PEP 302) in Python, Not C (original) (raw)

Just van Rossum just@letterror.com
Sat, 28 Dec 2002 18:17:21 +0100


Michael Hudson wrote:

I've not really been following this discussion with utmost care, but the name "metapath" doesn't move me. Wouldn't sys.importers be better name? Or maybe I'm misunderstanding it's intent -- which is still an argument for a better name.

I don't like the name much either, but it does fit quite well as the idea is that sys.path importing gets invoked through an item on meta_path. Perhaps this sketch helps a little:

sys.meta_path = [ BuiltinImporter(), # handles builtin modules FrozenImporter(), # handles frozen modules PathImporter(), # handles sys.path ]

def find_module(fullname, path=None): for i in sys.meta_path: l = i.find_module(fullname, path) if l is not None: return l return None

class PathImporter:

def find_module(self, fullname, path=None):
    if path is None:
        path = sys.path
    for p in path:
        i = get_path_importer(p) # deals with sys.path_hooks & cache
        if i is not None:
            l = i.find_module(fullname)
            if l is not None:
                return l
    retun None

This is how you should look at it, even though it doesn't match the implementation (yet). Right now you should imagine those three objects on meta_path as an implicit extension of sys.meta_path, they don't yet physically exist. This should change in the near future, perhaps even with 2.3a2.

Just