:
# 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]
それが安全か「正しい」方法ではありません、それにもかかわらず我々は役に立つだろう。それは非常に古いコードなので私を打ち負かさないでください。
出典
2009-05-26 18:34:05
dfa
これは関連していますか? [(setuptoolsパッケージの 'pkg_resources')](http://jeetworks.org/node/49) –
[pkgutil.walk_packages](http://docs.python.org/library/pkgutil.html#pkgutil。 walk_packages)。 – Dag
モジュールは@Dagのようにパッケージ –