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}")