69 lines
1.8 KiB
Python
Executable File
69 lines
1.8 KiB
Python
Executable File
"""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)
|