File size: 3,558 Bytes
aa586b2 08de414 aa586b2 351fe7b aa586b2 08de414 aa586b2 08de414 aa586b2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
"""
Voice Dialogue PyInstaller Hook
用于配置 Voice Dialogue 应用程序的 PyInstaller 打包规则
"""
import pathlib
from PyInstaller.utils.hooks import (
collect_submodules,
collect_data_files,
collect_system_data_files,
collect_dynamic_libs
)
# ============================================================================
# 路径配置
# ============================================================================
PROJECT_ROOT = pathlib.Path(__file__).parent.parent.parent.parent
ASSETS_ROOT = PROJECT_ROOT / "assets"
# ============================================================================
# 核心模块收集
# ============================================================================
# 收集主模块的所有子模块
hiddenimports = collect_submodules('voice_dialogue')
datas = collect_data_files('moyoyo_tts', include_py_files=True)
# 收集系统资源文件
datas += collect_system_data_files(ASSETS_ROOT.as_posix(), "assets")
# ============================================================================
# 第三方依赖配置
# ============================================================================
# AI/ML 相关依赖
ML_DEPENDENCIES = [
"llama_cpp",
"torch",
"transformers",
"pytorch_lightning",
"huggingface_hub",
"einops",
]
# 语音处理相关依赖
AUDIO_DEPENDENCIES = [
"librosa",
"soundfile",
"funasr_onnx",
"pywhispercpp",
"kokoro_onnx",
"playsound",
"pyaudio",
"silero_vad"
]
# 文本处理相关依赖
TEXT_PROCESSING_DEPENDENCIES = [
"jieba",
"jieba_fast",
"cn2an",
"g2p_en",
"pypinyin",
"misaki",
"opencc",
"wordsegment",
"LangSegment",
"en_core_web_sm",
"spacy",
"spacy_curated_transformers",
]
# Web/网络相关依赖
WEB_DEPENDENCIES = [
"fastapi",
"uvicorn",
"websockets",
"langchain",
"langchain_community",
]
# 系统相关依赖
SYSTEM_DEPENDENCIES = [
"AppKit", # macOS
"Foundation", # macOS
"ffmpeg",
]
# 其他依赖
OTHER_DEPENDENCIES = [
'loguru'
]
# 合并所有隐藏导入
hiddenimports.extend(
ML_DEPENDENCIES +
AUDIO_DEPENDENCIES +
TEXT_PROCESSING_DEPENDENCIES +
WEB_DEPENDENCIES +
SYSTEM_DEPENDENCIES +
OTHER_DEPENDENCIES
)
# ============================================================================
# 数据文件收集
# ============================================================================
# 需要收集数据文件的包配置
DATA_PACKAGES = [
("jieba_fast", {}),
("kokoro_onnx", {}),
("language_tags", {}),
("py3langid", {}),
("inflect", {"include_py_files": True}),
("g2p_en", {}),
("wordsegment", {}),
("espeakng_loader", {}),
("spacy", {"include_py_files": True}),
("misaki", {}),
("silero_vad", {}),
]
# 收集数据文件
for package_name, kwargs in DATA_PACKAGES:
try:
datas += collect_data_files(package_name, **kwargs)
except Exception as e:
print(f"警告:无法收集包 {package_name} 的数据文件: {e}")
# ============================================================================
# 动态库收集
# ============================================================================
# 需要收集动态库的包
BINARY_PACKAGES = [
"llama_cpp",
"pyaudio"
]
binaries = []
for package_name in BINARY_PACKAGES:
try:
binaries += collect_dynamic_libs(package_name)
except Exception as e:
print(f"警告:无法收集包 {package_name} 的动态库: {e}")
|