• 用PyInstaller打包用PyQt5编写的python程序


    0.背景

    本弱初学PyQt5,写了一个GUI小程序,但在用PyInstaller打包时出现了不少问题,现将几个比较大的问题记录如下,希望以后能记住。

    1. 资源打包

    首先是资源打包的问题,我写的程序引用了一张图片,那么在没经过特殊处理的情况下如果想让程序正常运行,就必须把图片放在和程序同一个目录下,但这样总觉得不太舒服。我在网上看到有三种解决方法:一是通过修改PyInstall配置文件*.spec来实现打包,但是在我的环境下不成功;二是自己写程序对图片进行Base64编码存在字符串里并存储在另一个脚本中,然后令主程序import它;三是用PyQt5自带的工具:pyrcc5进行处理。本质上第三种和第二种的原理是基本一样的,但本着“不(xiang)重(jin)复(ban)造(fa)轮(tou)子(lan)”的原则,我更喜欢第三种。操作如下:
    一、创建一个扩展名为qrc的文件,内容如下(mouse.ico是图片文件,且<file>标签可以有多个):

    <RCC>
        <qresource prefix="/">
            <file>mouse.ico</file>
        </qresource>
    </RCC>
    

    二、在程序目录执行命令

    pyrcc5 images.qrc -o images_qr.py
    

    命令语法类似于gcc,images.qrc是刚才那个文件,images_qr.py是输出的含有图片序列化字符串的python文件。
    三、在主程序的开头引用

    import images_qr
    

    同时将文中引用图片的路径前加冒号

    QIcon(':mouse.ico')
    

    2. PyInstaller打包程序

    其次是打包的问题,如果按照普通命令打包,会产生“No module name 'PyQt5.sip'”的错误,这是因为PyInstaller没有找全PyQt5依赖包,需要我们亲自指定:

    pyInstaller --hidden-import PyQt5.sip -F mousenew.py -w -i mouse.ico
    

    这样就能成功打包了。

    3. 总结

    注意以后打包时先别带-w参数,不然打包后的exe如果运行错误就直接弹个Fail to execute the script.然后就退出了,连调都没法调,如果是命令行打包,至少错了它还会在命令行打印Traceback,等命令行程序没错了再加-w。

  • 相关阅读:
    让DateTimePicker显示空时间值
    Microsoft Office ACCESS作为网站数据库的弊端
    存储过程中有临时表生成DataSet会失败
    C# Winform 开源控件
    SQL Server format phone number
    RDLC, canGrow=True, canShrink=False, content are shrinked to the left in Safari.
    C#.net winform skin 皮肤大全devexpress,IrisSkin,DotNetSkin,SkinCrafter
    Inside WCF Runtime
    IOS开发中的几种设计模式介绍
    android ndk gdb 调试
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/10203340.html
Copyright © 2020-2023  润新知