From c247399771df2568060b92aae29e28c60a727b64 Mon Sep 17 00:00:00 2001 From: jingrow Date: Thu, 30 Oct 2025 23:39:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=A0=B9=E7=9B=AE=E5=BD=95=E5=92=8Capps=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E7=9A=84=E9=80=9A=E7=94=A8=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jingrow/jingrow/dramatiq.py | 5 ++--- apps/jingrow/jingrow/utils/app_installer.py | 7 +++---- apps/jingrow/jingrow/utils/app_manager.py | 3 ++- apps/jingrow/jingrow/utils/path.py | 18 ++++++++++++++++++ 4 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 apps/jingrow/jingrow/utils/path.py diff --git a/apps/jingrow/jingrow/dramatiq.py b/apps/jingrow/jingrow/dramatiq.py index 6b268c0..b60dc99 100644 --- a/apps/jingrow/jingrow/dramatiq.py +++ b/apps/jingrow/jingrow/dramatiq.py @@ -6,6 +6,7 @@ import os from jingrow.config import Config +from jingrow.utils.path import get_apps_path def main() -> None: @@ -22,9 +23,7 @@ def main() -> None: ] # 仅从 Config.watch 控制是否启用 watch,目录固定为 apps 根目录 if bool(getattr(Config, "watch", False)): - current_dir = os.path.dirname(__file__) - apps_dir = os.path.abspath(os.path.join(current_dir, "..", "..")) - args.extend(["--watch", apps_dir]) + args.extend(["--watch", str(get_apps_path())]) os.execvp("dramatiq", args) diff --git a/apps/jingrow/jingrow/utils/app_installer.py b/apps/jingrow/jingrow/utils/app_installer.py index 2ee7ca8..e2e0f28 100644 --- a/apps/jingrow/jingrow/utils/app_installer.py +++ b/apps/jingrow/jingrow/utils/app_installer.py @@ -19,6 +19,7 @@ from jingrow.config import Config from jingrow.utils.jingrow_api import get_jingrow_api_headers from jingrow.utils.jingrow_api import get_record_id, create_record from jingrow.utils.app_manager import update_apps_txt +from jingrow.utils.path import get_root_path, get_apps_path logger = logging.getLogger(__name__) @@ -36,8 +37,7 @@ def handle_errors(func): def get_app_directories(): """获取应用目录路径""" - project_root = Path(__file__).resolve().parents[4] - apps_dir = project_root / "apps" + apps_dir = get_apps_path() apps_dir.mkdir(parents=True, exist_ok=True) return apps_dir, apps_dir @@ -47,8 +47,7 @@ def get_app_directories(): def extract_package(zip_path: str) -> Dict[str, Any]: """解压安装包 - 支持 ZIP 和 TAR.GZ""" # 获取项目根目录 - project_root = Path(__file__).resolve().parents[4] - tmp_dir = project_root / "tmp" + tmp_dir = get_root_path() / "tmp" tmp_dir.mkdir(parents=True, exist_ok=True) # 创建唯一临时目录 diff --git a/apps/jingrow/jingrow/utils/app_manager.py b/apps/jingrow/jingrow/utils/app_manager.py index 1992bb1..5fe272e 100644 --- a/apps/jingrow/jingrow/utils/app_manager.py +++ b/apps/jingrow/jingrow/utils/app_manager.py @@ -9,6 +9,7 @@ Jingrow App 生命周期管理 import sys import logging from pathlib import Path +from jingrow.utils.path import get_root_path from typing import Set logger = logging.getLogger(__name__) @@ -19,7 +20,7 @@ _loaded_app_paths: Set[str] = set() def get_project_root() -> Path: """获取项目根目录路径""" - return Path(__file__).resolve().parents[4] + return get_root_path() def get_apps_dir() -> Path: diff --git a/apps/jingrow/jingrow/utils/path.py b/apps/jingrow/jingrow/utils/path.py new file mode 100644 index 0000000..f597f4c --- /dev/null +++ b/apps/jingrow/jingrow/utils/path.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from functools import lru_cache +from pathlib import Path + + +@lru_cache(maxsize=1) +def get_root_path() -> Path: + """返回项目根目录:从 utils/path.py 回退到仓库根 (../../..)。""" + return Path(__file__).resolve().parents[3] + + +@lru_cache(maxsize=1) +def get_apps_path() -> Path: + """返回 apps 目录路径。""" + return get_root_path() / "apps" + +