From 318243049ca2a86cd51024dda09fbf2b3a25e0d4 Mon Sep 17 00:00:00 2001 From: Junyan Qin <1010553892@qq.com> Date: Mon, 4 Mar 2024 13:26:02 +0000 Subject: [PATCH] =?UTF-8?q?doc:=20=E6=B7=BB=E5=8A=A0=E6=8F=90=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- draft/README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/draft/README.md b/draft/README.md index 5f66d6b..d886c38 100644 --- a/draft/README.md +++ b/draft/README.md @@ -24,4 +24,54 @@ ## 设计 -在新的扩展方案中, \ No newline at end of file +### 插件的存储 + +在新的扩展方案中,插件仍然是存储在`plugins`目录下,`下载的插件`以zip包形式存放,正在开发的插件直接以源码形式存放。 + +树状图: + +``` +- main.py +- plugins/ + - __init__.py + - PluginA/ + - __init__.py + - plugin_a.py + - PluginB/ + - __init__.py + - plugin_b.py + - PluginC.zip + - PluginD.zip +``` + +插件zip包内部结构: + +``` +# PluginC.zip + +- PluginC.zip + - plugins/ + - PluginC/ + - __init__.py + - plugin_c.py + - PyMySQL/ + - __init__.py + - ... +``` + +### 导入路径 + +QChatGPT 将各个插件的zip包添加到 `sys.path`。此时,无论是开发中的插件还是下载的插件,都可以通过`import plugins.PluginC`的方式导入自身的模块。 +同时,先添加各个插件包,再添加`plugins`目录,可以保证开发中的插件优先于下载的插件。 + +### 依赖管理 + +插件的额外依赖(非QChatGPT的依赖)直接被打包到插件的zip包中,同时,基于上述的导入路径,插件可以直接导入自己的依赖。 + +### 插件管理 CLI + +计划提供一个插件管理的命令行工具,用于打包、测试、上传(在GitHub Actions中自动打包)和下载插件。 + +### 插件 API + +插件的注册、调用等 API 将额外设计。 \ No newline at end of file