| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # app/config/path_conf.py
- import os
- import sys
- from pathlib import Path
- # ===================== 关键:检测打包环境 =====================
- # PyInstaller 打包后会设置 sys.frozen 属性,sys._MEIPASS 是临时解压目录
- is_packaged = getattr(sys, 'frozen', False)
- MEIPASS_DIR = Path(sys._MEIPASS) if is_packaged else Path('.')
- # ===================== 适配 BASE_DIR =====================
- if is_packaged:
- # 打包后:BASE_DIR 指向可执行文件所在目录(而非临时目录,方便读取外部配置)
- BASE_DIR = Path(os.path.dirname(os.path.abspath(sys.executable)))
- else:
- # 开发环境:沿用原逻辑(基于__file__推导项目根目录)
- BASE_DIR = Path(__file__).parent.parent.parent
- # ===================== 原有路径定义(仅适配静态文件/配置路径) =====================
- # alembic 迁移文件存放路径(打包后若需迁移,需手动复制到BASE_DIR)
- ALEMBIC_VERSION_DIR = BASE_DIR / 'app' / 'alembic' / 'versions'
- # 日志文件路径(打包后日志输出到可执行文件同级logs目录)
- LOG_DIR = BASE_DIR / 'logs'
- # 静态资源目录(优先级:1.可执行文件同级static 2.临时目录内static)
- STATIC_DIR = BASE_DIR / 'static'
- if is_packaged and not STATIC_DIR.exists():
- STATIC_DIR = MEIPASS_DIR / 'static'
- # 上传/下载文件目录
- UPLOAD_DIR = STATIC_DIR / 'upload'
- DOWNLOAD_DIR = STATIC_DIR / 'download'
- # 环境配置目录(核心:打包后读取可执行文件同级的env文件夹)
- ENV_DIR = BASE_DIR / 'env'
- # 兜底:若外部无env文件夹,读取打包嵌入的env(临时目录内)
- if is_packaged and not ENV_DIR.exists():
- ENV_DIR = MEIPASS_DIR / 'env'
- # 初始化脚本(打包后仅保留临时目录内的脚本,若需运行时修改需手动复制)
- SCRIPT_DIR: Path = MEIPASS_DIR / 'app' / 'scripts' / 'data' if is_packaged else BASE_DIR / 'app' / 'scripts' / 'data'
- # 模版文件配置(打包后从临时目录读取,静态模版无需外部修改)
- TEMPLATE_DIR: Path = MEIPASS_DIR / 'app' / 'api' / 'v1' / 'module_generator' / 'gencode' / 'templates' if is_packaged else BASE_DIR / 'app' / 'api' / 'v1' / 'module_generator' / 'gencode' / 'templates'
- # banner.txt 文件路径(优先级:1.外部BASE_DIR 2.临时目录)
- BANNER_FILE = BASE_DIR / 'banner.txt' if (BASE_DIR / 'banner.txt').exists() else MEIPASS_DIR / 'banner.txt'
- # ===================== 自动创建必要目录(避免运行时报错) =====================
- for dir_path in [LOG_DIR, STATIC_DIR, UPLOAD_DIR, DOWNLOAD_DIR, ENV_DIR]:
- dir_path.mkdir(exist_ok=True, parents=True)
|