2025-07-18 13:14:28 +08:00

69 lines
1.8 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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