From 8931e2e016753355d580f995f1343d92351faa12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=AF=E5=A4=A7=E4=BE=A0?= Date: Fri, 11 Jul 2025 21:04:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=20=E4=BB=85=E5=AE=89=E8=A3=85=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=9C=80=E8=A6=81=E4=BD=BF=E7=94=A8=E7=9A=84=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/chain/system.py | 11 ++++------- app/helper/plugin.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/chain/system.py b/app/chain/system.py index fb92665f..9685decc 100644 --- a/app/chain/system.py +++ b/app/chain/system.py @@ -6,6 +6,7 @@ from typing import Union, Optional from app.chain import ChainBase from app.core.config import settings +from app.core.plugin import PluginManager from app.log import logger from app.schemas import Notification, MessageChannel from app.utils.http import RequestUtils @@ -136,13 +137,6 @@ class SystemChain(ChainBase): shutil.rmtree(target_path) shutil.copytree(item, target_path) logger.info(f"已恢复插件目录: {item.name}") - # 安装依赖 - requirements_file = target_path / "requirements.txt" - if requirements_file.exists(): - logger.info(f"正在安装插件 {item.name} 的依赖...") - success, message = PluginHelper.pip_install_with_fallback(requirements_file) - if not success: - logger.warn(f"插件 {item.name} 依赖安装失败: {message}") restored_count += 1 # 如果是文件 elif item.is_file(): @@ -155,6 +149,9 @@ class SystemChain(ChainBase): logger.info(f"插件恢复完成,共恢复 {restored_count} 个项目") + # 安装缺少的依赖 + PluginManager.install_plugin_missing_dependencies() + # 删除备份目录 try: shutil.rmtree(backup_dir) diff --git a/app/helper/plugin.py b/app/helper/plugin.py index ca8015b5..7146d365 100644 --- a/app/helper/plugin.py +++ b/app/helper/plugin.py @@ -649,10 +649,21 @@ class PluginHelper(metaclass=WeakSingleton): """ dependencies = {} try: + install_plugins = [ + plugin_id.lower() # 对应插件的小写目录名 + for plugin_id in SystemConfigOper().get( + SystemConfigKey.UserInstalledPlugins + ) + or [] + ] for plugin_dir in PLUGIN_DIR.iterdir(): if plugin_dir.is_dir(): requirements_file = plugin_dir / "requirements.txt" if requirements_file.exists(): + if plugin_dir.name not in install_plugins: + # 这个插件不在安装列表中 忽略它的依赖 + logger.debug(f"忽略插件 {plugin_dir.name} 的依赖") + continue # 解析当前插件的 requirements.txt,获取依赖项 plugin_deps = self.__parse_requirements(requirements_file) for pkg_name, version_specifiers in plugin_deps.items(): From f642493a389fe4c308788c8e2e4a2f535f1d8807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=AF=E5=A4=A7=E4=BE=A0?= Date: Fri, 11 Jul 2025 21:25:10 +0800 Subject: [PATCH 2/2] fix --- app/helper/plugin.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/helper/plugin.py b/app/helper/plugin.py index 7146d365..4976e5b5 100644 --- a/app/helper/plugin.py +++ b/app/helper/plugin.py @@ -649,13 +649,12 @@ class PluginHelper(metaclass=WeakSingleton): """ dependencies = {} try: - install_plugins = [ - plugin_id.lower() # 对应插件的小写目录名 + install_plugins = { + plugin_id.lower() # 对应插件的小写目录名 for plugin_id in SystemConfigOper().get( SystemConfigKey.UserInstalledPlugins - ) - or [] - ] + ) or [] + } for plugin_dir in PLUGIN_DIR.iterdir(): if plugin_dir.is_dir(): requirements_file = plugin_dir / "requirements.txt"