概要
開発したPythonスクリプトに対して、ユーザが処理(関数)を簡単に追加できるようにする方法として importlib が使えそうだったので、試してみました。
フォルダ構成
root/ ├ main.py └ plugins/ └ my_funcs.py
実装
ユーザが追加する関数には、あらかじめ開発者側が指定する引数と独自の引数を両方とれるように、後者を**params
という形で渡します。
このようにすることで、特定の信号やデータを対象としたユーザ独自処理の追加が実現できます。
main.py
import sys import importlib def run_custom_func(module_name, func_name, params): module = importlib.import_module(module_name) func = getattr(module, func_name) func("Run your module", **params) if __name__ == "__main__": print(sys.version) params = {"name": "Alice", "age": 10} run_custom_func('plugins.my_funcs', "hoge", params)
my_funcs.py
def hoge(context, name="", age=-1): print(context) print(name, age)
実行結果
>python main.py 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] Run your module Alice 10