python:Import module from memory
Question: > **Possible Duplicate:**  
>  [How to load compiled python modules from
> memory?](http://stackoverflow.com/questions/1830727/how-to-load-compiled-
> python-modules-from-memory)

I have some python file in the memory that may be StringIO.I how to import
module file stored in the memory.I do not want to save it to disk and then
load.

It look like:

    
    
    import StringIO.StrngIO([buf]) 
    


Answer: A nice approach is to use custom Meta import hooks as described in [PEP
302](http://www.python.org/dev/peps/pep-0302/#specification-
part-2-registering-hooks). One can write a class that imports modules
dynamically from a dictionary of strings:

    
    
    """Use custom meta hook to import modules available as strings. 
    Cp. PEP 302 http://www.python.org/dev/peps/pep-0302/#specification-part-2-registering-hooks"""
    import sys
    import imp
    
    modules = {"a" : 
    """def hello():
        return 'Hello World A!'""",
    "b":
    """def hello():
        return 'Hello World B!'"""}    
    
    class StringImporter(object):
    
       def __init__(self, modules):
           self._modules = dict(modules)
    
    
       def find_module(self, fullname, path):
          if fullname in self._modules.keys():
             return self
          return None
    
       def load_module(self, fullname):
          if not fullname in self._modules.keys():
             raise ImportError(fullname)
    
          new_module = imp.new_module(fullname)
          exec self._modules[fullname] in new_module.__dict__
          return new_module
    
    
    if __name__ == '__main__':
       sys.meta_path.append(StringImporter(modules))
    
       # Let's use our import hook
       from a import hello
       print hello()
       from b import hello
       print hello()
    

BTW: If you don't want that much and just want to import one string, then
stick to the implementation of the method load_module. All you need is inside
it.

