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
+3
View File
@@ -35,6 +35,9 @@ async def main_entry(loop: asyncio.AbstractEventLoop):
await deps.install_deps(missing_deps) await deps.install_deps(missing_deps)
print("已自动安装缺失的依赖包,请重启程序。") print("已自动安装缺失的依赖包,请重启程序。")
sys.exit(0) sys.exit(0)
# check plugin deps
await deps.precheck_plugin_deps()
# 检查pydantic版本,如果没有 pydantic.v1,则把 pydantic 映射为 v1 # 检查pydantic版本,如果没有 pydantic.v1,则把 pydantic 映射为 v1
import pydantic.version import pydantic.version
+12
View File
@@ -1,4 +1,6 @@
import pip import pip
import os
from ...utils import pkgmgr
# 检查依赖,防止用户未安装 # 检查依赖,防止用户未安装
# 左边为引入名称,右边为依赖名称 # 左边为引入名称,右边为依赖名称
@@ -55,3 +57,13 @@ async def install_deps(deps: list[str]):
for dep in deps: for dep in deps:
pip.main(["install", required_deps[dep]]) 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'])
+2
View File
@@ -30,6 +30,8 @@ class PersistenceManager:
self.meta = base.Base.metadata self.meta = base.Base.metadata
async def initialize(self): async def initialize(self):
self.ap.logger.info("Initializing database...")
for manager in database.preregistered_managers: for manager in database.preregistered_managers:
self.db = manager(self.ap) self.db = manager(self.ap)
+3
View File
@@ -3,6 +3,7 @@ from __future__ import annotations
import typing import typing
import pkgutil import pkgutil
import importlib import importlib
import os
import traceback import traceback
from .. import loader, events, context, models 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 ...provider.tools import entities as tools_entities
from ...utils import funcschema from ...utils import funcschema
from ...discover import engine as discover_engine from ...discover import engine as discover_engine
from ...utils import pkgmgr
class PluginLoader(loader.PluginLoader): class PluginLoader(loader.PluginLoader):
"""加载 plugins/ 目录下的插件""" """加载 plugins/ 目录下的插件"""
+1
View File
@@ -4,6 +4,7 @@ import typing
import traceback import traceback
import sqlalchemy import sqlalchemy
import logging
from ..core import app, taskmgr from ..core import app, taskmgr
from . import context, loader, events, installer, models from . import context, loader, events, installer, models
+3 -8
View File
@@ -1,24 +1,19 @@
from pip._internal import main as pipmain from pip._internal import main as pipmain
# from . import log
def install(package): def install(package):
pipmain(['install', package]) pipmain(['install', package])
# log.reset_logging()
def install_upgrade(package): def install_upgrade(package):
pipmain(['install', '--upgrade', package, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple", pipmain(['install', '--upgrade', package, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple",
"--trusted-host", "pypi.tuna.tsinghua.edu.cn"]) "--trusted-host", "pypi.tuna.tsinghua.edu.cn"])
# log.reset_logging()
def run_pip(params: list): def run_pip(params: list):
pipmain(params) 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", pipmain(['install', '-r', file, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple",
"--trusted-host", "pypi.tuna.tsinghua.edu.cn"]) "--trusted-host", "pypi.tuna.tsinghua.edu.cn"] + extra_params)
# log.reset_logging()