- 修复二进制打包插件表缺失的问题

This commit is contained in:
jxxghp 2023-12-04 11:33:16 +08:00
parent 7d73cdef33
commit 0214beb679
3 changed files with 28 additions and 3 deletions

View File

@ -9,6 +9,7 @@ from app.core.security import get_password_hash
from app.db import Engine, SessionFactory
from app.db.models import Base
from app.db.models.user import User
from app.helper.module import ModuleHelper
from app.log import logger
@ -17,8 +18,8 @@ def init_db():
初始化数据库
"""
# 导入模块,避免建表缺失
for module in Path(__file__).with_name("models").glob("*.py"):
importlib.import_module(f"app.db.models.{module.stem}")
models_path = Path(__file__).with_name("models")
ModuleHelper.dynamic_import_all_modules(models_path, "app.db.models")
# 全量建表
Base.metadata.create_all(bind=Engine)
# 初始化超级管理员

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import importlib
import pkgutil
from pathlib import Path
class ModuleHelper:
@ -35,3 +36,26 @@ class ModuleHelper:
print(f'加载模块 {package_name} 失败:{err}')
return submodules
@staticmethod
def dynamic_import_all_modules(base_path: Path, package_name: str):
"""
动态导入所有模块到全局对象
"""
modules = []
# 遍历文件夹,找到所有模块文件
for file in base_path.glob("*.py"):
file_name = file.stem
if file_name != "__init__":
modules.append(file_name)
# 保存已有的全局对象
existing_globals = set(globals().keys())
# 动态导入并添加到全局命名空间
for module in modules:
full_module_name = f"{package_name}.{module}"
import_module = importlib.import_module(full_module_name)
module_globals = import_module.__dict__
# 仅导入全局对象中不存在的部分
new_objects = {name: value for name, value in module_globals.items() if name not in existing_globals}
# 更新全局命名空间
globals().update(new_objects)

View File

@ -1 +1 @@
APP_VERSION = 'v1.4.8'
APP_VERSION = 'v1.4.8-1'