You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cx_Freeze打包PySide6项目为可执行文件后无法启动的求助

PySide6 + cx_Freeze 打包问题求助

版本信息

  • PySide6: 6.6.1
  • shiboken6: 6.6.1
  • cx_Freeze: 6.15.14

我的cx_Freeze打包代码

import sys
from cx_Freeze import setup, Executable


files = ["music.mp3", "logo.png", "main.ui", "myfolder"]

build_exe_options = {
    "packages": ["os"],
    "include_files": files
}

# base="Win32GUI"
base = "Win32GUI" if sys.platform == "win32" else None

setup(
    name="my app",
    version="1.0",
    description="my app",
    options={"build_exe": build_exe_options},
    executables=[Executable("main.py", base=base)],
)

我按照官方文档操作,但始终遇到错误(错误截图:错误界面截图)。我尝试将shiboken6.abi3.dll添加到include_files中:

files = ["music.mp3", "logo.png", "main.ui", "myfolder" ,"..\myenv\Lib\site-packages\shiboken6\shiboken6.abi3.dll"]

但问题依旧,请问该如何解决,或有其他方法打包PySide6项目并包含所需文件夹?


解决方案

方法1:修复cx_Freeze的依赖扫描逻辑

cx_Freeze有时无法自动识别PySide6的完整依赖,可做以下调整:

  1. 显式声明PySide6相关包:在build_exe_options的packages里加入PySide6和shiboken6,强制cx_Freeze扫描完整依赖链:
build_exe_options = {
    "packages": ["os", "PySide6", "shiboken6"],
    "include_files": files
}
  1. 用绝对路径添加DLL:手动添加DLL时,避免相对路径解析错误,用os.path拼接绝对路径:
import os
shiboken_dll = os.path.join(sys.exec_prefix, "Lib", "site-packages", "shiboken6", "shiboken6.abi3.dll")
files = ["music.mp3", "logo.png", "main.ui", "myfolder", shiboken_dll]

方法2:改用PyInstaller(更稳定的PySide6打包工具)

如果cx_Freeze的问题始终无解,PyInstaller对PySide6的支持更成熟,步骤如下:

  1. 安装PyInstaller:pip install pyinstaller
  2. 执行打包命令(Windows环境):
pyinstaller --onefile --windowed --add-data "music.mp3;." --add-data "logo.png;." --add-data "main.ui;." --add-data "myfolder;myfolder" main.py
  • --onefile:生成单个可执行文件
  • --windowed:隐藏控制台窗口(对应cx_Freeze的Win32GUI)
  • --add-data:格式为源路径;目标路径,Linux/macOS需把;换成:

方法3:手动添加Qt插件目录

错误大概率是Qt插件加载失败,cx_Freeze需要明确包含Qt的插件目录:

  1. 找到PySide6的plugins目录(一般在site-packages/PySide6/plugins)
  2. 将整个plugins目录以元组形式添加到include_files,保证打包后路径结构正确:
import os
plugins_dir = os.path.join(sys.exec_prefix, "Lib", "site-packages", "PySide6", "plugins")
files = ["music.mp3", "logo.png", "main.ui", "myfolder", (plugins_dir, "plugins")]

内容的提问来源于stack exchange,提问作者randompersonhehe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:50:13