How to find all child modules in Python?

后端 未结 6 1312
走了就别回头了
走了就别回头了 2021-02-19 11:46

While it is fairly trivial in Python to import a \"child\" module into another module and list its attributes, it becomes slightly more difficult when you want to import all

6条回答
  •  旧时难觅i
    2021-02-19 12:18

    When I was a kind and just beginning programming in Python I've written this for my modular IRC bot:

    
        # Load plugins
    
        _plugins = []
    
        def ifName(name):
            try:
                return re.match('([^_.].+)\.[^.]+', a).group(1)
            except:
                return None
    
        def isValidPlugin(obj):
            from common.base import PluginBase
            try:
                if obj.__base__ == PluginBase:
                    return True
                else:
                    return False
            except:
                return False
    
        plugin_names = set(ifilter(lambda a: a!=None, [ifName(a) for a in os.listdir(os.path.join(os.getcwd(), 'plugins'))]))
        for plugin_name in plugin_names:
            try:
                plugin = __import__('plugins.'+plugin_name, fromlist=['plugins'])
                valid_plugins = filter(lambda a: isValidPlugin(a), [plugin.__getattribute__(a) for a in dir(plugin)])
                _plugins.extend(valid_plugins)
            except Exception, e:
                logger.exception('Error loading plugin %s', plugin_name)
    
        # Run plugins
    
        _plugins = [klass() for klass in _plugins]
    

    It's not secure or "right" way, but maybe it we'll be useful nevertheless. It's very old code so please don't beat me.

提交回复
热议问题