mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-11 05:20:57 +00:00
perf: ensure plugin deps on startup (#858)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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'])
|
||||||
@@ -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,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/ 目录下的插件"""
|
||||||
|
|||||||
@@ -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
@@ -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()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user