|
""" |
|
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") |
|
|
|
|
|
|
|
|
|
|
|
|
|
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_DEPENDENCIES = [ |
|
"fastapi", |
|
"uvicorn", |
|
"websockets", |
|
"langchain", |
|
"langchain_community", |
|
] |
|
|
|
|
|
SYSTEM_DEPENDENCIES = [ |
|
"AppKit", |
|
"Foundation", |
|
"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}") |
|
|