使用PyInstaller把PyQt5生产exe时文件报错总结

本文介绍使用PyInstaller将PyQt5程序打包成exe文件的过程中遇到的问题及其解决方案,包括处理枚举错误、编码问题、Qt插件缺失等。
部署运行你感兴趣的模型镜像

PyInstaller使PyQt5生成exe执行文件

本文主要总结了PyInstaller使用过程中遇到的问题及解决办法

PyInstaller简介

PyInstaller 是一个用来将 Python 程序打包成一个独立可执行软件包,支持 Windows、Linux 和 Mac OS X。。 —— [ PyInstaller官网 ]

PyInstaller打包PyQt的详细方法可参照使用pyinstaller打包Python3.5+PyQt5.6项目生成exe文件进行安装

运行报错汇总

1. pyinstaller : AttributeError: module ‘enum’ has no attribute ‘IntFlag’

这个问题主要是enum34包的问题,Stack Overflow上说在pythonb3.4以后就有了标准的enum包,把enum卸载即可。但我的程序中需要tensorflow,而我的版本是1.4,明确要求需要依赖enum34这个包,还不能删除。

今天早上看无意发现tensorflow已经更新到了tensorflow-1.7

=====================================
依赖

=====================================
我一看依赖已经不需要enum34了,赶紧更新

#本来应该是直接更新
pip install -U tensorflow 

#但是我为了彻底除去enum,所以我是先卸载,再安装具体如下
pip uninstall tensorflow 

pip install tensorflow 

更新后,再执行Pyinstaller,就没有再报这个错误。

2.pyinstaller ‘utf-8’ codec can’t decode byte 0xce in position 82:

这个问题遇到时比较头疼,因为Python好多次都遇到编码问题,而且感觉不太好解决

经过多次搜索以及实验,最后参考了这篇文章Stack Overflow并修改,并成功
就是把Python\Lib\site-packages\Pyinstaller\compat.py 这个文件,找到 out = out.decode(encoding)这句话,


out = out.decode(encoding)
修改为
out = out.decode(encoding, errors='ignore')

这样执行就不再报这个错了。

3.This application failed to start because it could not find or load the Qt platform plugin “windows” in “”.

然后运行

pyinstaller calc.py

又看到报错信息

This application failed to start because it could not find or load the Qt platform plugin
 "windows" in "".

然后查询发现缺少配置文件,需要把Qt安装目录中plugins下的platforms文件夹,一并粘贴到exe文件所在的文件夹,再次运行exe文件,就不会报错了参考

4.QPixmap::scaled: Pixmap is a null pixmap.

我的PyQt5程序中,有一个加载图片并显示的功能,在执行py文件时,Qt界面可以正常加载;但是转为exe后,用exe文件打开,就不显示,会报错。

经过查询QPixmap is null on other machines,还是缺少配置文件,最后找到Qt的plugins/imageformats文件夹,把imageformats文件夹复制到exe相同文件夹下,就可以正常执行了。

最后文件完美执行,感谢Stack Overflow!

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

使用 PyInstaller 打包 PyQt5 应用,可能会遇到多种问题,包括路径冲突、插件缺失、依赖问题等。以下是一些常见错误及其解决方法。 ### 3.1 缺少包(搬来的) 如果在打包过程中提示某些包缺失,可以尝试通过 `pip install` 命令安装缺失的包。此外,也可以通过虚拟环境确保所有依赖项都被正确安装[^1]。 ### 3.2 缺少包的终极简单处理 为了简化依赖管理,可以使用虚拟环境(如 `venv` 或 `conda`)来隔离项目依赖,并确保所有需要的库都被安装。使用 `pip freeze > requirements.txt` 保存依赖列表,然后在目标环境中通过 `pip install -r requirements.txt` 安装所有依赖[^1]。 ### 3.3 缺少文件打包后的程序会提示某些文件缺失,这通常是因为某些资源文件(如图片、配置文件等)未被正确包含在打包过程中。可以通过修改 `.spec` 文件使用 `datas` 参数指定需要包含的文件路径,确保这些文件被正确打包[^1]。 ```python # 修改 .spec 文件中的 datas 配置 a = Analysis(['your_script.py'], pathex=['/path/to/your/project'], binaries=[], datas=[('resources/', 'resources/')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) ``` ### 3.4 无限重复启动 当打包的 PyQt5 应用出现无限重复启动的问题,通常是因为程序在启动尝试重新运行自身。这可能是由于某些异常处理不当或程序逻辑错误导致。可以通过检查 `sys.argv` 和程序入口点逻辑来解决此问题。 ### 插件路径问题 在某些情况下,打包后的 PyQt5 应用可能会提示如下错误: ``` qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "" This application failed to start because no Qt platform plugin could be initialized. ``` 为了解决这个问题,可以在系统环境变量中添加 Qt 插件路径。具体操作如下: - 打开“我的电脑” -> “属性” -> “高级系统设置” -> “环境变量”。 - 在“系统变量”中新建一个变量,变量名为 `QT_QPA_PLATFORM_PLUGIN_PATH`。 - 找到 Python 安装路径中的 PyQt5 插件目录,例如 `D:\Python38\Lib\site-packages\PyQt5\Qt5\plugins\platforms`,将该路径添加到环境变量中[^3]。 ### 多版本 Python 导致的问题 如果系统中安装了多个 Python 版本,并且 PyInstallerPyQt5 分别安装在不同的环境中,可能会导致打包找不到 PyQt5。应确保 PyInstallerPyQt5 安装在同一个 Python 环境中,并使用该环境的 `python -m PyInstaller` 命令进行打包[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值