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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值