| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #!/usr/bin/env python3
- """
- 配置模块 - 统一管理项目配置
- """
- import os
- from pathlib import Path
- from typing import Optional
- class Config:
- """项目配置类"""
- # 默认缓存根目录(用户主目录下的 cache)
- _DEFAULT_CACHE_ROOT = os.path.expanduser("~/cache")
- # 缓存根目录
- _cache_root: Optional[str] = None
- @classmethod
- def get_cache_root(cls) -> str:
- """
- 获取缓存根目录
- Returns:
- 缓存根目录路径
- """
- if cls._cache_root is None:
- # 1. 优先从环境变量读取
- cache_root = os.environ.get("CACHE_ROOT")
- if cache_root:
- cls._cache_root = cache_root
- else:
- # 2. 使用默认路径
- cls._cache_root = cls._DEFAULT_CACHE_ROOT
- return cls._cache_root
- @classmethod
- def set_cache_root(cls, path: str) -> None:
- """
- 设置缓存根目录
- Args:
- path: 缓存根目录路径(可以是绝对路径或相对路径)
- """
- cls._cache_root = path
- @classmethod
- def get_cache_dir(cls, subdir: str) -> str:
- """
- 获取特定子模块的缓存目录
- Args:
- subdir: 子目录名称,如:
- - "text_embedding", "semantic_similarity" - 计算缓存
- - "data/search", "data/detail" - 爬虫数据缓存
- - "data/analysis" - 分析结果缓存
- Returns:
- 完整的缓存目录路径
- """
- cache_root = cls.get_cache_root()
- return str(Path(cache_root) / subdir)
- @classmethod
- def get_data_dir(cls, subdir: str = "") -> str:
- """
- 获取数据缓存目录(data 目录现在在缓存根目录下)
- Args:
- subdir: 子目录名称,如 "search", "detail", "tools_list" 等
- 如果为空字符串,返回 data 根目录
- Returns:
- 完整的数据目录路径
- Note:
- data 目录现在统一放在缓存根目录下:
- - 默认:cache/data/
- - 如果设置了 CACHE_ROOT=/custom: /custom/data/
- """
- cache_root = cls.get_cache_root()
- if subdir:
- return str(Path(cache_root) / "data" / subdir)
- return str(Path(cache_root) / "data")
- @classmethod
- def reset(cls) -> None:
- """
- 重置配置为默认值(主要用于测试)
- """
- cls._cache_root = None
- # 便捷函数
- def get_cache_root() -> str:
- """获取缓存根目录"""
- return Config.get_cache_root()
- def set_cache_root(path: str) -> None:
- """设置缓存根目录"""
- Config.set_cache_root(path)
- def get_cache_dir(subdir: str) -> str:
- """获取特定子模块的缓存目录"""
- return Config.get_cache_dir(subdir)
- def get_data_dir(subdir: str = "") -> str:
- """
- 获取数据缓存目录
- Note: data 目录现在在缓存根目录下,例如 cache/data/
- """
- return Config.get_data_dir(subdir)
- if __name__ == "__main__":
- print("=" * 60)
- print("配置模块示例")
- print("=" * 60)
- print()
- # 示例 1: 使用默认配置
- print("示例 1: 默认配置")
- print(f"缓存根目录: {get_cache_root()}")
- print(f"text_embedding 缓存: {get_cache_dir('text_embedding')}")
- print(f"semantic_similarity 缓存: {get_cache_dir('semantic_similarity')}")
- print()
- # 示例 2: 自定义缓存根目录
- print("示例 2: 自定义缓存根目录")
- set_cache_root("/tmp/my_cache")
- print(f"缓存根目录: {get_cache_root()}")
- print(f"text_embedding 缓存: {get_cache_dir('text_embedding')}")
- print(f"semantic_similarity 缓存: {get_cache_dir('semantic_similarity')}")
- print()
- # 示例 3: 使用相对路径
- print("示例 3: 使用相对路径")
- set_cache_root("data/cache")
- print(f"缓存根目录: {get_cache_root()}")
- print(f"text_embedding 缓存: {get_cache_dir('text_embedding')}")
- print()
- # 示例 4: 通过环境变量设置
- print("示例 4: 通过环境变量设置")
- Config.reset() # 重置配置
- os.environ["CACHE_ROOT"] = "/Users/semsevens/Desktop/workspace/daily/1113/how_1120_v3/cache"
- print(f"缓存根目录: {get_cache_root()}")
- print(f"text_embedding 缓存: {get_cache_dir('text_embedding')}")
- print()
- # 示例 5: 数据目录配置(在缓存根目录下)
- print("示例 5: 数据目录配置(在缓存根目录下)")
- Config.reset() # 重置配置
- print(f"缓存根目录: {get_cache_root()}")
- print(f"data 目录: {get_data_dir()}")
- print(f"search 数据: {get_data_dir('search')}")
- print(f"detail 数据: {get_data_dir('detail')}")
- print()
- # 示例 6: 设置缓存根目录后,data 也会跟着变
- print("示例 6: 设置缓存根目录后,data 也会跟着变")
- set_cache_root("/custom/cache")
- print(f"缓存根目录: {get_cache_root()}")
- print(f"data 目录: {get_data_dir()}")
- print(f"search 数据: {get_data_dir('search')}")
- print()
- print("=" * 60)
- print("使用方法:")
- print("-" * 60)
- print("缓存根目录:")
- print(" 1. 默认使用 'cache' 目录")
- print(" 2. 通过代码设置: set_cache_root('/path/to/cache')")
- print(" 3. 通过环境变量: export CACHE_ROOT=/path/to/cache")
- print()
- print("目录结构:")
- print(" cache/")
- print(" ├── text_embedding/ # 向量相似度缓存")
- print(" ├── semantic_similarity/ # 语义相似度缓存")
- print(" └── data/ # 数据缓存(原 data 目录)")
- print(" ├── search/ # 搜索数据")
- print(" ├── detail/ # 详情数据")
- print(" └── analysis/ # 分析结果")
- print("=" * 60)
|