PyQt5多项目使用Pyinstaller打包成exe遇到的坑

最近在用PyQt5写了一个聊天室,加上内网穿透实现了外网上面的聊天。想发给同学一起使用,但是使用Pyinstaller打包时遇到了好多坑。现记录一下。

项目结构

我的项目大概结构如下所示:
在这里插入图片描述
其中除了server.py,基本都是客户端需要的东西,包括各种窗口,以及对应的emoji图片和文件等等。

开始打包

打包使用pyinstaller,先切换到目标文件夹,然后直接使用命令pyinstaller -F 需要打包的py文件主入口名称.py,即可在目录下生成.spec文件,接下来我们要修改文件中的内容来完成打包。
对于spec文件中每一个参数应该怎么填写,我这里参考的是这篇文章:2个技巧,学会Pyinstaller打包的高级用法
我的spec文件如下所示:

#-*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['run_login.py','chat_window.py','En_De_MAC_By_File.py','File_Encrypt.py','login.py','RSA_hash.py','vachat.py','video_set.py'],
    pathex=['C:\\Users\\86132\\Desktop\\qt_chat\\emoji','C:\\Program Files\\Python37\\Lib\\site-packages\\PyQt5','C:\\Program Files\\Python37\\Lib\\site-packages\\PyQt5\\Qt\\bin','C:\\Program Files\\Python37\\Lib\\site-packages\\PyQt5\\Qt\\plugins','C:\\Users\\86132\\Desktop\\qt_chat\\icon','C:\\Users\\86132\\Desktop\\qt_chat\\pic_grab','C:\\Users\\86132\\Desktop\\qt_chat\\client_cache'],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='run_login',
    debug=False,
    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,
    icon = 'logo.ico'
)

其中的pathex填写一些支持文件的路径,这里我使用的是绝对路径,问题不大。
还有一些动态库的路径,PyQt5打包完成之后总是提示一些奇奇怪怪的问题,接下来我将一一说道

PyQt5打包之后运行提示ImportError: DLL load failed

这个是PyQt5的一些老毛病了,你先看到对应报错的行,看看是哪个库出的问题。
这里我们可以直接将pyqt5的一些支持文件路径添加到pathx中(spec文件中的那个)

 pathex=['C:\\Users\\86132\\Desktop\\qt_chat\\emoji','C:\\Program Files\\Python37\\Lib\\site-packages\\PyQt5',
 'C:\\Program Files\\Python37\\Lib\\site-packages\\PyQt5\\Qt\\bin',
 'C:\\Program Files\\Python37\\Lib\\site-packages\\PyQt5\\Qt\\plugins']

然后可能就是你用了anaconda,然后pyinstaller是安装在base环境中的,所以这个环境中没有对应的库,直接装上就可以解决问题了。

opencv的兼容性问题

打包里面包含opencv时,可能会出现兼容性问题导致exe文件不能够运行,这里可以选择对opencv进行降级,百度搜索一下即可。

资源文件不显示

我们的qt界面中有一些背景图片,但是打包好exe之后并没有显示。因为我们并没有将文件一同打包进exe中,所以我们只需要将对应的文件复制到exe路径中即可。如果是相对路径,也要保证相对路径不发生改变。当然,也可以使用data参数来进行打包。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rainist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值