fix: 修复打包脚本兼容性

- 使用 Python -m PyInstaller 方式提高兼容性
- 简化命令参数
- 添加文件大小显示

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
let5sne.win10
2026-02-12 23:04:05 +08:00
parent 7e4f2c92b1
commit 8501f17b6c

View File

@@ -4,42 +4,52 @@
使用方法: pip install pyinstaller && python build_exe.py 使用方法: pip install pyinstaller && python build_exe.py
""" """
import subprocess import subprocess
import sys
from pathlib import Path from pathlib import Path
PROJECT_ROOT = Path(__file__).parent PROJECT_ROOT = Path(__file__).parent
def build(): def build():
"""使用 PyInstaller 打包""" """使用 PyInstaller 打包(使用 Python -m 方式兼容性更好)"""
# PyInstaller 命令
cmd = [
"pyinstaller",
"--name=信封信息提取系统",
"--onefile", # 打包成单个 exe
"--windowed", # 无控制台窗口
"--clean", # 清理缓存
"--noconfirm", # 覆盖输出目录不询问
"--add-data=src;src", # 包含源码目录
"--hidden-import=PaddleOCR",
"--hidden-import=paddleocr",
"--hidden-import=cv2",
"--hidden-import=PyQt6",
"--collect-all=PaddleOCR",
"--collect-all=paddleocr",
"src/desktop.py",
]
print("正在打包,请稍候...") print("正在打包,请稍候...")
print(f"工作目录: {PROJECT_ROOT}") print(f"工作目录: {PROJECT_ROOT}")
print(f"输出目录: {PROJECT_ROOT / 'dist'}")
print("-" * 50) print("-" * 50)
subprocess.run(cmd, check=True, cwd=PROJECT_ROOT) # 使用 Python -m PyInstaller 方式,兼容性更好
cmd = [
sys.executable,
"-m", "PyInstaller",
"--name=信封信息提取系统",
"--onefile",
"--windowed",
"--clean",
"--noconfirm",
"--add-data=src;src",
"src/desktop.py",
]
try:
subprocess.run(cmd, check=True, cwd=str(PROJECT_ROOT))
print("-" * 50) print("-" * 50)
print("打包完成!") print("打包完成!")
print(f"可执行文件: {PROJECT_ROOT / 'dist' / '信封信息提取系统.exe'}") exe_path = PROJECT_ROOT / "dist" / "信封信息提取系统.exe"
if exe_path.exists():
size_mb = exe_path.stat().st_size / 1024 / 1024
print(f"可执行文件: {exe_path}")
print(f"文件大小: {size_mb:.1f} MB")
else:
print("警告: 未找到输出文件")
except subprocess.CalledProcessError as e:
print("-" * 50)
print(f"打包失败: {e}")
sys.exit(1)
except FileNotFoundError:
print("-" * 50)
print("错误: 未找到 PyInstaller")
print("请先安装: pip install pyinstaller")
sys.exit(1)
if __name__ == "__main__": if __name__ == "__main__":