69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
![]() |
"""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)
|