插件的基本格式 ============== 插件存放在 `TaoLiSystem/plugins` 文件夹下,一个插件基本构成如下: .. code-block:: none 插件文件夹名称 │ __init__.json └─ __init__.py * `插件文件夹名称` -- 插件的文件夹名称,不能包含空格。 * `__init__.json` -- 插件的配置文件,用于介绍和配置插件。 * `__init__.py` -- 插件的代码加载文件,系统会调用此文件。 插件的配置文件 ============== 配置文件 `__init__.json` 是一个 JSON 格式的文件,其基本内容如下: .. code-block:: json {"name": "你好世界", "brief": "Hello world", "author": "Yishang", "version": "1.0.0", "description": "这是一个示例插件,你可以模仿这个插件来达成一些功能", "ico_bin": "ico.bin", "ico_pos": 0} * ``name`` -- 插件的名称 * ``brief`` -- 插件的简短介绍,显示在插件页面下方 * ``author`` -- 插件的开发者 * ``version`` -- 插件的版本 * ``description`` -- 插件的详细介绍 * ``ico_bin`` -- 插件的图标存放文件,如果为空则不显示图标 * ``ico_pos`` -- 插件的图标存放文件中图标的位置,如果为空则不显示图标,如果为整数型直接定位,如果为字符串变量图标文件查找。 插件的开发要求 ============== 只需要像常规写代码一样将代码写入 `__init__.py` 中即可,但是需要注意的是 **代码中不能存在死循环** ,否则将无法退出插件。设计插件时一定要考虑退出插件的操作。 此外插件里不能包含下面的代码:: if __name__ == "__main__": pass # do something 因为插件不是被系统调用,上述判断中的代码不能执行,请直接写在判断之外。 插件的保留导入 ============== 插件运行结束后(退出插件的循环之后),系统会自动释放插件本身和插件导入的模块。考虑到一些插件需要后台运行,所以需要设定保留模块的方法。 插件运行结束后,系统会获取插件中的 KEEP_MODULES 变量来确认需要保留的模块,KEEP_MODULES 是个列表,列表的项为模块的名称。 比如我想要保留自身和 urequests 模块以及其依赖模块,我可以在 ``KEEP_MODULES`` 填写:: KEEP_MODULES = [__name__, "urequests", "urllib", "urllib.parse", "usocket"] .. note:: 模块保留时要考虑其依赖的模块,比如模块 ``urequests`` 依赖了 ``urllib`` ``urllib.parse`` ``usocket`` 这三个模块。 变量 ``KEEP_MODULES`` 是插件运行之后,系统才读取的,所以运行动态更新,这意味着您可以在每次插件退出之前动态决定要保留什么模块。