This module provides a simple way to dynamically load other Python modules as Plugins to your current project.
You can install this python module via pip:
pip install simple-plugin-loader
Otherwise the module can be downloaded from PyPI: https://pypi.org/project/simple-plugin-loader/
- Import the module:
from simple_plugin_loader import Loader
- Load your plugins/modules:
# initialize the loader loader = Loader() # load your plugins plugins = loader.load_plugins(<plugin_path>, <plugin_base_class>, <specific_plugins>, <recursive>)
- (Optional) The already loaded plugins/modules can be accessed via the
plugins
property of the loader instance:plugins = loader.plugins
This method does the actual plugin loading.
It loads only Python modules that can be executed in the current environment. For every successfully loaded module a message is populated through the Python logging
library (log level: INFO
).
If a module e.g. contains syntax errors or depends on other not installed Python modules, it will be skipped. So the main program does not fail completely. An error message is populated through the Python logging
library (log level: ERROR
).
<plugin_path>
: str
This string represents the path (relative or absolute) to the directory from where the plugins/modules should be loaded.<plugin_base_class>
: class (Default:SamplePlugin
)
The Loader does not load all found modules that are in the above directory. It only loads classes that are sub-classes of the here specified class.
The default value of this argument is theSamplePlugin
class. You can use this class as the base class for your plugins:from simple_plugin_loader.sample_plugin import SamplePlugin class YourPlugin(SamplePlugin): pass
<specific_plugins>
: List[str] (Default:[]
)
This list can contain case sensitive class names, that should be loaded. Then no other plugins will be loaded. The argument<plugin_base_class>
will also be ignored, so any class can be loaded.<recursive>
: bool (Default:False
)
Set this flag toTrue
if you wish to load plugins/modules recursively to the above directory.
The method returns a dictionary that has the following structure:
- Key: The name of the plugin/module. This name is the module name of the module that contains the plugin class.
- Value: The plugin class. Not an instance!