diff --git a/app/core/plugin.py b/app/core/plugin.py index b1fd0a5b..c5d90e50 100644 --- a/app/core/plugin.py +++ b/app/core/plugin.py @@ -339,6 +339,7 @@ class PluginManager(metaclass=Singleton): missing_dependencies = self.pluginhelper.find_missing_dependencies() if not missing_dependencies: return missing_dependencies + logger.debug(f"检测到缺失的依赖项: {missing_dependencies}") logger.info(f"开始安装缺失的依赖项,共 {len(missing_dependencies)} 个...") # 第二步:安装依赖项并返回结果 total_start_time = time.time() diff --git a/app/helper/plugin.py b/app/helper/plugin.py index 0d92173c..e7c7171a 100644 --- a/app/helper/plugin.py +++ b/app/helper/plugin.py @@ -4,11 +4,10 @@ import traceback from pathlib import Path from typing import Any, Dict, List, Optional, Tuple, Set -import pkg_resources from cachetools import TTLCache, cached from packaging.specifiers import SpecifierSet, InvalidSpecifier from packaging.version import Version, InvalidVersion -from pkg_resources import Requirement +from pkg_resources import Requirement, working_set from app.core.config import settings from app.db.systemconfig_oper import SystemConfigOper @@ -404,7 +403,7 @@ class PluginHelper(metaclass=Singleton): :return: 备份目录路径 """ plugin_dir = PLUGIN_DIR / pid - backup_dir = Path(settings.TEMP_PATH) / "plugins_backup" / pid + backup_dir = Path(settings.TEMP_PATH) / "plugin_backup" / pid if plugin_dir.exists(): # 备份时清理已有的备份目录,防止残留文件影响 @@ -577,12 +576,12 @@ class PluginHelper(metaclass=Singleton): """ try: # 收集所有插件的依赖项 - missing_dependencies = self.__find_plugin_dependencies() # 返回格式为 {package_name: version_specifier} + plugin_dependencies = self.__find_plugin_dependencies() # 返回格式为 {package_name: version_specifier} # 获取已安装的包及其版本 installed_packages = self.__get_installed_packages() # 返回格式为 {package_name: Version} # 需要安装或更新的依赖项列表 dependencies_to_install = [] - for pkg_name, version_specifier in missing_dependencies.items(): + for pkg_name, version_specifier in plugin_dependencies.items(): spec_set = SpecifierSet(version_specifier) installed_version = installed_packages.get(pkg_name) if installed_version is None: @@ -620,7 +619,7 @@ class PluginHelper(metaclass=Singleton): requirements_temp_file.parent.mkdir(parents=True, exist_ok=True) with open(requirements_temp_file, "w", encoding="utf-8") as f: for dep in dependencies: - f.write(dep + '\n') + f.write(dep + "\n") # 使用自动降级策略安装依赖 success, message = self.__pip_install_with_fallback(requirements_temp_file) @@ -640,7 +639,7 @@ class PluginHelper(metaclass=Singleton): """ installed_packages = {} try: - for dist in pkg_resources.working_set: + for dist in working_set: pkg_name = self.__standardize_pkg_name(dist.project_name) try: installed_packages[pkg_name] = Version(dist.version) @@ -668,7 +667,6 @@ class PluginHelper(metaclass=Singleton): # 解析当前插件的 requirements.txt,获取依赖项 plugin_deps = self.__parse_requirements(requirements_file) for pkg_name, version_specifiers in plugin_deps.items(): - logger.debug(f"当前处理的包:{pkg_name}, 版本约束:{version_specifiers}") if pkg_name in dependencies: # 更新已存在的包的版本约束集合 dependencies[pkg_name].update(version_specifiers) @@ -699,7 +697,6 @@ class PluginHelper(metaclass=Singleton): req = Requirement(line) pkg_name = self.__standardize_pkg_name(req.name) version_specifier = str(req.specifier) - logger.debug(f"解析到依赖项:包名={pkg_name}, 版本约束={version_specifier}") if pkg_name in dependencies: dependencies[pkg_name].append(version_specifier) else: @@ -723,7 +720,6 @@ class PluginHelper(metaclass=Singleton): try: merged_dependencies = {} for pkg_name, version_specifiers in dependencies.items(): - logger.debug(f"合并包:{pkg_name} 的版本约束:{version_specifiers}") # 合并版本约束 spec_set = SpecifierSet() for specifier in version_specifiers: diff --git a/app/startup/plugins_initializer.py b/app/startup/plugins_initializer.py index e1b270ee..abefda04 100644 --- a/app/startup/plugins_initializer.py +++ b/app/startup/plugins_initializer.py @@ -41,10 +41,13 @@ async def init_plugins_async(): async def execute_task(loop, task_func, task_name): + """ + 执行后台任务 + """ try: result = await loop.run_in_executor(None, task_func) if isinstance(result, list) and result: - logger.info(f"{task_name} 已完成,共处理 {len(result)} 个项目") + logger.debug(f"{task_name} 已完成,共处理 {len(result)} 个项目") else: logger.debug(f"没有新的 {task_name} 需要处理") return result