用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。

原文地址:https://www.cnblogs.com/YuanZiming/p/10203340.html

时间: 2024-11-08 03:30:52

用PyInstaller打包用PyQt5编写的python程序的相关文章

用 pyinstaller 打包含xpinyin 库的Python程序

??在文章用 pyinstaller 打包含有 pinyin 库的程序中,给出了如何使用pyinstaller 打包含xpinyin 库的Python程序的方法,能生成可运行的exe文件.本文将会给出另外一种办法. ??Python的xpinyin模块的文件夹如下: 复制该文件夹下的_init_.py文件中的源代码至文件mypinyin.py,并将代码中的下面这句代码 data_path = os.path.join(os.path.dirname(os.path.abspath(__file_

Notepad++编写运行python程序

Notepad++编写运行python程序. 1.菜单栏->语言->P->Python设置语言为Python 2.写好代码后ctrl+s保存文件为py文件 3.菜单栏->运行,输入cmd /k cd /d "$(CURRENT_DIRECTORY)" &  python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT 4.点击保存按钮,将该命令设置为快捷键,如ctrl

编写一个Python程序,从控制台输入一个字符串(保存在变量S中),然后通过while循坏不断输入字符串(保存在变量substr中),并统计substr在s中出现的次数,然后利用format方法格式化统计结果。

s = input("请输入一个字符串:") while True: subStr = input("请输入另一个字符串") if subStr == "exit": break; i = 0 count = 0 while i < len(s): j = s.find(subStr,i) if j > -1: count +=1 i = j + len(subStr) else: break; print("''{}'在'

编写一个python程序,从控制台输入一个包含整数的字符串,将字符串中的整数格式化为长度为10的格式,位数不足前面补0,例如:456格式化成0000000456,具体要求如下:1、不使用正则表达式。2、使用字典格式化字符串。3、将从控制台输入的字符串转换为字符串模板再进行格式化。4、最后在控制台输出字符串模板和格式经结果。

s = input("请输入一个包含整数的字符串:") s1 = '' number = '' index = 0 d = {} print(len(s)) for i in range(len(s)): c = s[i] if c.isdigit(): number += c else: if len(number) > 0: # ab34cd54ab45 ab{number0}cd{number1}ab s1 += "{{number{}:010}}".f

三个你必须要记住的Pyinstaller打包命令——利用Python实现打包exe

/1 前言/ 嘿,各位小伙伴,晚上好呀,我相信各位小伙伴都是python的爱好者.也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加班,多陪陪媳妇.再不行,让代码替我们干着重复的工作,我们有节省出来的时间打游戏不好嘛,是吧,哈哈哈. 但是呢,我们开发的脚本一般都会用到一些第三方包,可能别人也需要用到我们的脚本,如果我们将我们的xx.py文件发给他,他是不能直接用的,他还需要安装python解释器,甚至还要安装我们用的那些第三方包,是不是有点小麻烦?但是我们都知道,PC

将Python程序打包为exe方法

将Python程序打包为exe文件,需要使用到的工具是pyinstaller pyinstaller是一个多平台的Python程序打包为exe的免费工具 安装pyinstaller: 1,在Windows中,pyinstaller依赖PyWin32,pypiwin32(Linux,mac忽略) 如果在安装pyinstaller时使用的是pip或者easy_install会自动pypwin32,只需要手动安装Pywin32即可 安装命令:pip install pywin32 2,使用pip安装p

将python程序打包成exe( pyintaller) 的用法

当我们用python写好一个脚本给没安装python解释器的windows用户使用时,那将无法执行脚本! 而 pyinstaller 就是一个帮助我们将python程序打包成 exe 可执行文件给没安装python解释器的用户使用的神器! 要使用 pyinstaller ,我们首先得安装它: 使用 pip 安装: pip install pyinstaller GitHub源码地址 安装完成后,我们先来检查下是否成功安装! pyinstaller -v 若显示出版本号,则证明我们已经成功安装了!

创建Python程序2

在Milang的IDE里编辑好之后,然后按F5运行一下,就会在下面的Output窗口输出"Hello, World!"字符串,如下图: 恭喜你,你编写最简单的Python程序已经完成,已经成为一个Python的程序员了,对于一门语言的入门,就是这么简单的. 通过上面这个简单的程序,就可看到Python程序是不需要编译,就可以直接运行.在这个程序基础之上,你可以修改它的输出,比如把Hello, World!改为Hello, CSDN,或者其它,你感觉有意义的句子.又或者你把"H

pyinstaller打包python源程序访问hive

1.需求 使用hvie server一段时间后,业务部门需要自己不定时的查询业务数据,之前这一块都是他们提需求我们来做,后来发现这样重复一样的工作放在我们这边做是在没有效率,遂提出给他们工具或者web UI自助查询,当然hive有自己的hwi可以通过网页UI进行自助查询,但是这对不懂sql的业务人员有点不太友好,目前有没时间去修改hwi的UI,所以还是给他们提供查询工具吧.我这边主要使用python thrift访问集群的hive,所以自然要将python源码打包成.exe,业务人员在windo