赞
踩
pyinstaller的用法网上传的很多,实际上大家最关心的问题是,怎么把图片文件、qss样式表等不是以.py
结尾的文件统统打包到一个.exe
里
这里我尝试了多种方法,总结出了一种有效的途径
首先介绍一下pyinstaller的特点,它会去寻找并打包那些依赖项以及你给出的.py
文件,而对于图片文件,如.jpg
、.png
;qss样式文件,如.qss
等,pyinstaller是不会帮你打包进exe的,那么我们可以灵活变通一下,把所有的图片、qss文件全部转化成python文件,那岂不是可以直接被打包进exe了吗
转化方式就是,把图片、qss全部变成字符串写到某个.py
里,等到使用的时候再做处理即可,下面我各自举例:
之前我使用的图片是这样的:
我写了一个img2py.py
的程序,将图片转化成python文件
# -*- coding: utf-8 -*- import base64 def pic2py(picture_name): """ 将图像文件转换为py文件 :param picture_name: :return: """ open_pic = open("%s" % picture_name, 'rb') b64str = base64.b64encode(open_pic.read()) open_pic.close() write_data = 'img = "%s"' % b64str.decode() f = open('%s.py' % picture_name.replace('.', '_'), 'w+') f.write(write_data) f.close() if __name__ == '__main__': pics = ["pic.jpg"] # 在这里放上你要转化的文件名即可 for i in pics: pic2py(i)
转化完成后你的目录下就会多出了一个pic_jpg.py
文件,内容如下:
qss的转化比较简单,把所有的qss的内容用一个三引号括起来,放入一个新建的python文件即可,内容如下:
首先将两个python文件导入主程序
from pic_jpg import img # 对应pic_jpg.py
from qss import qss # 对应qss.py
然后在main函数里对图片进行解码,重新生成jpg图像;并引用qss样式:
def main():
tmp = open('pic.jpg', 'wb') #将原先的pic_jpg.py写入pic.jpg的图片文件
tmp.write(base64.b64decode(img))
tmp.close
...
Qss=qss # 直接将qss这个字符串给QSS即可
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(Qss)
...
首先我们需要将pyqt的bin路径找出(pyinstaller 无法准确获取 Qt动态库文件路径,打包生成的文件 xxx.exe 内缺少相关依赖),一般为...\Python37\Lib\site-packages\PyQt5\Qt\bin
然后打开cmd到当前目录,这里我们用到了多个python文件,其中app.py
为主程序,我们应当这样写:
pyinstaller --paths C:\...\Python37\Lib\site-packages\PyQt5\Qt\bin -i MIPS.ico -F -w app.py MyHighLighter.py pic_jpg.py qss.py
这里的-F
是打包成一个exe文件的意思,-w
是不使用控制台的意思,-i .ico
是使用exe图标的意思
打包成功:
此时在dist文件夹内,只有一个exe程序
点击运行后,会自动在当前目录生成pic.jpg
文件
程序运行成功:
此时我们可以创建该应用的快捷方式到桌面,点击运行后并不会在桌面生成新的图片,而是一直使用原先目录下的那张图片
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。