69 lines
1.8 KiB
Python
Raw Normal View History

2025-07-18 13:14:28 +08:00
"""PyInstaller 钩子文件: hook-vosk.py.
解决 vosk 在打包时找不到模型或依赖库的问题
"""
import os
import sys
from pathlib import Path
from PyInstaller.utils.hooks import (
collect_data_files,
collect_dynamic_libs,
collect_submodules,
copy_metadata,
)
# 添加src目录到Python路径以便导入资源查找器
src_path = Path(__file__).parent.parent / "src"
if str(src_path) not in sys.path:
sys.path.insert(0, str(src_path))
from utils.resource_finder import find_models_dir
print(f"当前工作目录: {os.getcwd()}")
# 收集 datas 和 binaries
datas = []
binaries = []
# 收集 vosk 的元数据
datas.extend(copy_metadata("vosk"))
# 收集 vosk 可能用到的动态库
binaries.extend(collect_dynamic_libs("vosk"))
# 使用统一的资源查找器查找模型目录
models_dir = find_models_dir()
if models_dir:
print(f"找到模型目录: {models_dir}")
# 遍历模型目录下的所有子目录
for item in models_dir.iterdir():
if item.is_dir():
print(f"收集模型: {item}")
# 收集整个模型目录
model_files = collect_data_files(str(item))
datas.extend(model_files)
print(f"收集了 {len(model_files)} 个文件")
else:
print("未找到模型目录")
print(f"总共收集了 {len(datas)} 个数据文件")
for data in datas[:5]: # 只打印前5个文件作为示例
print(f" {data}")
# 自动收集 vosk 的所有子模块
hiddenimports = collect_submodules("vosk")
# 添加其他可能未被自动发现的依赖
additional_imports = [
"cffi", # vosk 依赖的 cffi
"packaging.version", # vosk 检查版本
"numpy", # 音频处理
"sounddevice", # 录音功能
]
# 合并所有导入
hiddenimports.extend(additional_imports)