根据您的描述,问题很可能出在打包时未能正确包含语音识别模型文件或相关依赖。pyVideoTrans 的打包命令(用于生成带界面的版本)使用了 PyInstaller,并包含了一系列复杂的钩子(hooks)和数据文件处理。
以下是 pyVideoTrans 项目用于生成带界面可执行文件的核心打包命令(来自其 setup.py 或相关构建脚本的精简版):
pyinstaller --noconfirm --clean --windowed ^
--name "pyVideoTrans" ^
--icon "videotrans/styles/icon.ico" ^
--add-data "videotrans;videotrans/" ^
--add-data "videotrans/styles;videotrans/styles/" ^
--add-data "videotrans/code;videotrans/code/" ^
--add-data "ffmpeg;ffmpeg/" ^
--hidden-import "chardet" ^
--hidden-import "pydub" ^
--hidden-import "whisper" ^
--hidden-import "faster_whisper" ^
--hidden-import "openai" ^
--hidden-import "edge_tts" ^
--hidden-import "soundfile" ^
--hidden-import "librosa" ^
--hidden-import "pysrt" ^
--hidden-import "zhconv" ^
--hidden-import "tiktoken" ^
--hidden-import "srt" ^
--hidden-import "setuptools" ^
--hidden-import "sklearn" ^
--hidden-import "sklearn.utils._weight_vector" ^
--additional-hooks-dir="." ^
--exclude-module "torch" ^
--collect-submodules "faster_whisper" ^
--collect-submodules "whisper" ^
sp.py
针对您 CLI 版本打包失败的核心原因和解决方案:
模型文件缺失(最可能):faster-whisper 需要下载模型(如 large-v3)。打包时,这些模型不会自动包含。您需要:
- 方案A(动态下载):确保您的
cli.py 在首次运行时,能自动将模型下载到用户可写目录(如 %APPDATA%/pyvideotrans/models),而不是打包程序内部。检查失败日志,看是否是 Could not locate model file 之类的错误。 - 方案B(打包模型):将模型文件夹(例如
~/.cache/huggingface/hub/models--Systran--faster-whisper-large-v3)手动复制到项目目录(如 models/ 下),并在打包命令中用 --add-data "models;models/" 包含它。但这会显著增大打包体积。
- 依赖缺失:除了上述
--hidden-import,语音识别还依赖 ctranslate2、tokenizers 等。确保都已正确隐藏导入或收集子模块。 运行时路径问题:打包后,sys._MEIPASS 指向临时解压目录。您的代码中所有文件路径(如查找模型、配置文件)都必须使用 sys._MEIPASS 进行修正。例如:
import sys
import os
if getattr(sys, 'frozen', False):
base_path = sys._MEIPASS
else:
base_path = os.path.dirname(__file__)
model_path = os.path.join(base_path, 'models', 'faster-whisper-large-v3')
给您的建议打包命令(CLI版):
在您的项目根目录下,尝试使用以下命令打包 cli.py:
pyinstaller --onefile --console ^
--name "my_video_trans_cli" ^
--add-data "videotrans;videotrans/" ^
--add-data "ffmpeg;ffmpeg/" ^
--hidden-import "faster_whisper" ^
--hidden-import "whisper" ^
--hidden-import "chardet" ^
--hidden-import "pydub" ^
--hidden-import "soundfile" ^
--collect-submodules "faster_whisper" ^
--additional-hooks-dir="." ^
cli.py
关键步骤:
- 先不打包,直接调试:在命令行运行
python cli.py [参数],确保所有功能(尤其是语音识别)在源码模式下完全正常。 - 查看完整错误:打包后运行失败时,将错误信息完整保存下来。重点看
Traceback 的最后几行,它指明了是哪个模块或文件找不到。 - 模型路径处理:按照上面第3点修改您的代码,确保在打包后能正确找到模型文件(无论是动态下载还是打包进去)。
如果上述方法仍无法解决,请提供打包后运行失败的完整错误日志,以便进一步分析。
参考文档链接: