developer meetup, Febuary 19th 2019
import importlib
import pkgutil
myapp_plugins = {
name: importlib.import_module(name)
for finder, name, ispkg in pkgutil.iter_modules()
if name.startswith('myapp_')
}
import importlib
import pkgutil
import myapp.plugins
def iter_namespace(ns_pkg):
return pkgutil.iter_modules(
ns_pkg.__path__,
ns_pkg.__name__ + "."
)
myapp_plugins = {
name: importlib.import_module(name)
for finder, name, ispkg
in iter_namespace(myapp.plugins)
}
setup(
...
entry_points={'myapp.plugins': 'a = myapp_plugin_a'},
...
)
import pkg_resources
myapp_plugins = {
entry_point.name: entry_point.load()
for entry_point
in pkg_resources.iter_entry_points('myapp.plugins')
}
import importlib
def load_plugins(plugins_path):
modules = []
for file_path in plugins_path.glob("*.py"):
module_name = str(file_path.stem)
spec = importlib.util.spec_from_file_location(
module_name,
str(file_path)
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
modules.append((module_name, module))
return tuple(modules)
myapp_plugins = {
module_name: module
for module_name, module
in load_plugins(myapp.USER_PLUGINS_PATH)
}