perf: ensure plugin deps on startup (#858)

This commit is contained in:
Junyan Qin
2025-04-13 22:51:21 +08:00
parent c8f331675c
commit d012c1e33d
6 changed files with 24 additions and 8 deletions

View File

@@ -35,6 +35,9 @@ async def main_entry(loop: asyncio.AbstractEventLoop):
await deps.install_deps(missing_deps)
print("已自动安装缺失的依赖包,请重启程序。")
sys.exit(0)
# check plugin deps
await deps.precheck_plugin_deps()
# 检查pydantic版本如果没有 pydantic.v1则把 pydantic 映射为 v1
import pydantic.version

View File

@@ -1,4 +1,6 @@
import pip
import os
from ...utils import pkgmgr
# 检查依赖,防止用户未安装
# 左边为引入名称,右边为依赖名称
@@ -55,3 +57,13 @@ async def install_deps(deps: list[str]):
for dep in deps:
pip.main(["install", required_deps[dep]])
async def precheck_plugin_deps():
print('Prechecking plugin dependencies...')
for dir in os.listdir("plugins"):
subdir = os.path.join("plugins", dir)
if not os.path.isdir(subdir):
continue
if 'requirements.txt' in os.listdir(subdir):
pkgmgr.install_requirements(os.path.join(subdir, 'requirements.txt'), extra_params=['-q', '-q', '-q'])

View File

@@ -30,6 +30,8 @@ class PersistenceManager:
self.meta = base.Base.metadata
async def initialize(self):
self.ap.logger.info("Initializing database...")
for manager in database.preregistered_managers:
self.db = manager(self.ap)

View File

@@ -3,6 +3,7 @@ from __future__ import annotations
import typing
import pkgutil
import importlib
import os
import traceback
from .. import loader, events, context, models
@@ -10,6 +11,8 @@ from ...core import entities as core_entities
from ...provider.tools import entities as tools_entities
from ...utils import funcschema
from ...discover import engine as discover_engine
from ...utils import pkgmgr
class PluginLoader(loader.PluginLoader):
"""加载 plugins/ 目录下的插件"""

View File

@@ -4,6 +4,7 @@ import typing
import traceback
import sqlalchemy
import logging
from ..core import app, taskmgr
from . import context, loader, events, installer, models

View File

@@ -1,24 +1,19 @@
from pip._internal import main as pipmain
# from . import log
def install(package):
pipmain(['install', package])
# log.reset_logging()
def install_upgrade(package):
pipmain(['install', '--upgrade', package, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple",
"--trusted-host", "pypi.tuna.tsinghua.edu.cn"])
# log.reset_logging()
def run_pip(params: list):
pipmain(params)
# log.reset_logging()
def install_requirements(file):
def install_requirements(file, extra_params: list = []):
pipmain(['install', '-r', file, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple",
"--trusted-host", "pypi.tuna.tsinghua.edu.cn"])
# log.reset_logging()
"--trusted-host", "pypi.tuna.tsinghua.edu.cn"] + extra_params)