mirror of
https://github.com/langbot-app/LangBot.git
synced 2025-11-25 03:15:06 +08:00
perf: ensure plugin deps on startup (#858)
This commit is contained in:
3
main.py
3
main.py
@@ -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
|
||||
|
||||
@@ -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'])
|
||||
@@ -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)
|
||||
|
||||
@@ -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/ 目录下的插件"""
|
||||
|
||||
@@ -4,6 +4,7 @@ import typing
|
||||
import traceback
|
||||
|
||||
import sqlalchemy
|
||||
import logging
|
||||
|
||||
from ..core import app, taskmgr
|
||||
from . import context, loader, events, installer, models
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user