当前位置: 首页 > news >正文

pyinstaller 打包python GUI程序避坑指南

一、pyinstaller打包踩坑描述

之前用PyQt写了一个python GUI程序,当时打包很顺利,命令也很简单,最近来更新维护这个程序,改好代码,然后打包也很顺利,但是打包完成后,运行exe程序就报错了,一直报错模块找不到,报错如下:
File “qtexe\main.py”, line 6, in
File “C:\Users\NUC\AppData\Local\Temp\embedded.31opupww.zip\shibokensupport_feature_.py”, line 142, in _import
ModuleNotFoundError: No module named ‘wallet_module’

二、导致报错原因分析

看报错的字面意思是没有找到我自定义的模块"wallet_module",但是我本地运行是正常的,所以问题应该出在打包的时候没有将我指定的py文件打进去

三、解决方案

1、指定打包文件所在的路径
2、指定需要添加的文件
3、指定需要添加的py文件
4、代码中全程使用相对路径动态获取路径

四、解决方案一

1、打包命令修改

pyinstaller -wF --paths "D:\work2023\GitDir\qt_project" --add-data "png/1.png;png" --add-data "png/2.png;png" --add-data "png/3.png;png" --add-data "keys/20240402_certificate.pem;keys" --add-data "keys/20240402_private_key.pem;keys" --add-data "keys/20240402_public_key.pem;keys" main.py --hidden-import chat_module --hidden-import data_aes_encrypt --hidden-import data_md5_sign --hidden-import data_rsa_encrypt --hidden-import data_tools --hidden-import food_module --hidden-import foodother --hidden-import handle_chat_mysql --hidden-import handle_faker --hidden-import handle_food_mysql --hidden-import handle_register_wallet --hidden-import handle_wallet_mysql --hidden-import public_module --hidden-import public_tools --hidden-import user_param --hidden-import wallet_module --hidden-import wallet_signature --hidden-import window

2、参数说明
–paths:指定项目绝对路径
–add-data:添加程序运行过程中需要的文件,多个文件要写多个–add-data,格式:“目录/文件名称;打包后放的目标目录名称”
–hidden-import:添加py模块,多个py文件要写多个–hidden-import

五、解决方案二

1、修改打包过程中生成的main.spec文件

a = Analysis(['main.py'],pathex=['D:\\work2023\\GitDir\\qt_project'],binaries=[],datas=[('png/1.png', 'png'), ('png/2.png', 'png'), ('png/3.png', 'png'), ('keys/20240402_certificate.pem', 'keys'), ('keys/20240402_private_key.pem', 'keys'), ('keys/20240402_public_key.pem', 'keys')],hiddenimports=['chat_module', 'data_aes_encrypt', 'data_md5_sign', 'data_rsa_encrypt', 'data_tools', 'food_module', 'foodother', 'handle_chat_mysql', 'handle_faker', 'handle_food_mysql', 'handle_register_wallet', 'handle_wallet_mysql', 'public_module', 'public_tools', 'user_param', 'wallet_module', 'wallet_signature', 'window'],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],noarchive=False,
)
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,a.binaries,a.datas,[],name='main',debug=True,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=False,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)

2、基于修改后的main.spec进行打包,执行重新打包命令
pyinstaller main.spec


http://www.mrgr.cn/news/61252.html

相关文章:

  • 关于是否是物体的证明
  • 《深度剖析算法优化:提升效率与精度的秘诀》
  • 【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
  • Video VQGAN Model源码解析(VideoVAE+、VidTok 、OmniTokenizer、MAGE、MaskVIT、MaskGiT )
  • WPF系列九:图形控件EllipseGeometry
  • Linux父、子进程间的竞争条件
  • 串联两个检测模型
  • 金山C++一面-面经总结
  • HTB:Analytics[WriteUP]
  • [Linux进程控制]进程创建|进程终止|进程等待
  • 练习pandas的基础操作,有题目有详解有源码
  • 使用不可靠来源的住宅代理的风险
  • 怎么提取视频里的音频?关于提取视频里音频的几种方法
  • Gartner发布生成式AI的信任、风险和安全管理创新指南:生成式AI的三类风险—内容异常、数据安全和AI应用安全
  • 从理论到实践,精准测试的初创之路
  • Jmeter压力测试简单教程(包括服务器状态监控)
  • 6.标志寄存器
  • 雷池社区版compose配置文件解析-mgt
  • Android实现扫描二维码条形码,实现扫描快递单,相册图片识别快递单 最慢3秒出回调结果
  • WordPress中最值得推荐的AI插件:专家级指南
  • 【动手学强化学习】part7-Actor-Critic算法
  • 自适应神经网络架构:原理解析与代码示例
  • linux系统安装软件的三种方式
  • JavaEE初阶------网络编程续+传输层UDP协议介绍
  • WebGL 3D基础
  • 当变频器报警过热故障时,如何处理