一种不错的方法是使用PEP 302中所述的自定义元导入挂钩。可以编写一个从字符串字典动态导入模块的类:
"""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 sysimport impmodules = {"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_moduleif __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()顺便说一句:如果您不想太多,而只想导入一个字符串,那么请坚持执行load_module方法。您只需要在里面。



