feat(core): 支持PyInstaller打包并优化资源路径

- 修改app.py以支持PyInstaller打包后的资源路径
- 更新session.py以支持APP_DATA_DIR环境变量
- 增强webui.py以设置打包后的数据目录
- 添加pyproject.toml的PyInstaller依赖组
- 新增构建脚本和GitHub Actions工作流
This commit is contained in:
cnlimiter
2026-03-15 20:54:52 +08:00
parent 45503102a6
commit 151fa7cc49
7 changed files with 215 additions and 21 deletions

View File

@@ -20,14 +20,14 @@ class DatabaseSessionManager:
def __init__(self, database_url: str = None):
if database_url is None:
# 默认使用项目根目录下的 SQLite 数据库
db_path = os.path.join(
# 优先使用 APP_DATA_DIR 环境变量PyInstaller 打包后由 webui.py 设置)
data_dir = os.environ.get('APP_DATA_DIR') or os.path.join(
os.path.dirname(os.path.dirname(os.path.dirname(__file__))),
'data',
'database.db'
'data'
)
db_path = os.path.join(data_dir, 'database.db')
# 确保目录存在
os.makedirs(os.path.dirname(db_path), exist_ok=True)
os.makedirs(data_dir, exist_ok=True)
database_url = f"sqlite:///{db_path}"
self.database_url = database_url

View File

@@ -4,6 +4,7 @@ FastAPI 应用主文件
"""
import logging
import sys
from pathlib import Path
from typing import Optional
@@ -21,11 +22,15 @@ from .task_manager import task_manager
logger = logging.getLogger(__name__)
# 获取项目根目录
PROJECT_ROOT = Path(__file__).parent.parent.parent
# PyInstaller 打包后静态资源在 sys._MEIPASS开发时在源码根目录
if getattr(sys, 'frozen', False):
_RESOURCE_ROOT = Path(sys._MEIPASS)
else:
_RESOURCE_ROOT = Path(__file__).parent.parent.parent
# 静态文件和模板目录
STATIC_DIR = PROJECT_ROOT / "static"
TEMPLATES_DIR = PROJECT_ROOT / "templates"
STATIC_DIR = _RESOURCE_ROOT / "static"
TEMPLATES_DIR = _RESOURCE_ROOT / "templates"
def create_app() -> FastAPI: