82 lines
2.4 KiB
Python
82 lines
2.4 KiB
Python
"""
|
||
打包脚本 - 使用 PyInstaller 打包 Python 代码
|
||
只打包 Python 代码,不包含其他资源文件
|
||
"""
|
||
import os
|
||
import sys
|
||
import subprocess
|
||
|
||
def build():
|
||
"""使用 PyInstaller 打包应用"""
|
||
|
||
# 检查是否安装了 PyInstaller
|
||
try:
|
||
import PyInstaller
|
||
except ImportError:
|
||
print("正在安装 PyInstaller...")
|
||
subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
|
||
|
||
# PyInstaller 命令参数
|
||
cmd = [
|
||
"pyinstaller",
|
||
"--name=GUI应用", # 可执行文件名
|
||
"--onefile", # 打包成单个文件
|
||
"--windowed", # Windows 下不显示控制台窗口(GUI应用)
|
||
"--clean", # 清理临时文件
|
||
"--noconfirm", # 不询问覆盖
|
||
|
||
# 隐藏导入(PyInstaller 可能无法自动检测的模块)
|
||
"--hidden-import=PyQt5",
|
||
"--hidden-import=PyQt5.QtCore",
|
||
"--hidden-import=PyQt5.QtGui",
|
||
"--hidden-import=PyQt5.QtWidgets",
|
||
"--hidden-import=qfluentwidgets",
|
||
"--hidden-import=pandas",
|
||
"--hidden-import=openpyxl",
|
||
"--hidden-import=loguru",
|
||
"--hidden-import=beautifulsoup4",
|
||
"--hidden-import=curl_cffi",
|
||
"--hidden-import=DrissionPage",
|
||
"--hidden-import=requests",
|
||
"--hidden-import=main", # 导入 main 模块
|
||
|
||
# 排除不需要的模块(减小体积)
|
||
"--exclude-module=matplotlib",
|
||
"--exclude-module=numpy.distutils",
|
||
"--exclude-module=scipy",
|
||
"--exclude-module=IPython",
|
||
"--exclude-module=jupyter",
|
||
|
||
# 主入口文件
|
||
"gui_app.py"
|
||
]
|
||
|
||
print("=" * 60)
|
||
print("开始打包...")
|
||
print("=" * 60)
|
||
print(f"执行命令: {' '.join(cmd)}")
|
||
print("=" * 60)
|
||
|
||
try:
|
||
# 执行打包命令
|
||
result = subprocess.run(cmd, check=True)
|
||
print("\n" + "=" * 60)
|
||
print("打包完成!")
|
||
print("=" * 60)
|
||
print(f"可执行文件位置: dist/GUI应用.exe")
|
||
print("=" * 60)
|
||
return True
|
||
except subprocess.CalledProcessError as e:
|
||
print(f"\n打包失败: {e}")
|
||
return False
|
||
except Exception as e:
|
||
print(f"\n打包过程中出现错误: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
success = build()
|
||
sys.exit(0 if success else 1)
|