Is there a better way to have a minimal Python plugin mechanism than the following?
(This was inspired from this post.)
import sys
import pkgutil
import os.path
import plugins
pluginsPath = os.path.dirname(plugins.__file__)
pluginModules = [name for _, name, _ in pkgutil.iter_modules([pluginsPath])]
dictOfPlugins = {}
for plugin in pluginModules:
thePluginModuleName = "plugins."+plugin
result = __import__(thePluginModuleName)
dictOfPlugins[plugin] = sys.modules[thePluginModuleName]
(This does assume that all your plugins are in a directory called "plugins" and thus are modules in that package, and that that directory has a blank __init__.py file in it.)
If you wanted to look for a particular plugin, the name would be a key in the dictOfPlugins
, and the module object itself would be the value. Assuming you knew what the interface to your Python plugin modules would be, this would seem to do the job. Is there a better way to do this?
plugins.register()
method and call that after the plugin declaration. (e.g.plugins.register('pluginModuleName')
orplugins.register(pluginModule)
. Does that make sense? \$\endgroup\$