解决pyinstaller打包过程中外部资源无法加载的问题 …
由于上一篇文章中使用了pyinsatll的方式将二维码生成器进行打包成exe程序应用,在打包的过程中遇到了一个问题就是不能将外部的资源图片打包进exe的应用程序。
所以,在这里记录一下怎么可以将外部的资源文件打包到exe的应用程序中,这样无论在哪台电脑上面执行都能展示出我们的资源图片,不会出现找不到资源的情况。
首先,就是QRC格式的资源文件,就像下面这样将资源路径配置到这样的文件中。我创建了一个 images.qrc 的文件。
【阅读全文】
<RCC>
<qresource prefix="/">
<file>default.png</file>
<file>images/1.jpg</file>
<file>images/2.jpg</file>
</qresource>
</RCC>
将需要打包的资源文件路径按照上面这样配置。
需要注意的是这里的资源路径配置文件(images.qrc)是和你需要打包的.py文件在同一个目录下面。
接下来就是将qrc生成.py的python模块文件,实际上生成后是将外部资源转换成了二进制的文件,使用下面这个命令进行生成。
pyrcc5 -o images.py images.qrc
生成的 images.py文件就是这样,由于太长这里仅仅展示了部分的内容。
# -*- coding: utf-8 -*-
# Resource object code
#
# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore
qt_resource_data = b"
x00x01x14x4d
x89
x50x4ex47x0dx0ax1ax0ax00x00x00x0dx49x48x44x52x00
x00x01x44x00x00x01x41x08x06x00x00x00x0fx27xd6x75
x00x00x00x01x73x52x47x42x00xaexcex1cxe9x00x00x00
x04x67x41x4dx41x00x00xb1x8fx0bxfcx61x05x00x00x00
x09x70x48x59x73x00x00x0exc3x00x00x0exc3x01xc7x6f
xa8x64x00x00xffxa5x49x44x41x54x78x5execxbdx07xbc
x56xc5x96xe6x3dxf3x4dxcex3dx33x3dxb7xbbx67xfax76
x98xeexb9xddxf7x5exf5x9ax23x8ax59x89x06x10x73x44
最后,还需要将我们生成的资源文件 images.py模块导入到需要引用的模块当中。
在做处理之前,我们原始的引用资源的方式是这样的。
self.image.setPixmap(QPixmap("default.png"))
在做了处理之后,需要将前面转化好的 images.py 模块导入到当前需要引用资源的模块。
import images
self.image.setPixmap(QPixmap(":/default.png"))
注意在使用 images.py 的资源引用方式后,在这个图片路径前面多了一个冒号的使用。
最后,执行正常的打包过程即可,打包完成后会发现我们的资源图片能够正常的引用。
pyinstaller -F -w -i favicon.ico test2.py
可以使用 -i 参数给应用加上图标。
在打包过程中如果出现模块没有发现的问题,将引用的自定义模块放到外部的包下面引用即可。比如需要打包main.py ,则main.py的同一级目录下面尽量只有它一个.py文件,否则打包成exe文件很容易出现找不到引用包的情况。
【往期精彩】
pyqt5做了一个二维码生成器,已打包成exe可执行程序…
如何在控制台实现一个数据管理系统(包括MYSQL数据库的增删改查)
自制文档格式转换器,支持 .txt/.xlsx/.csv格式转换…
PyPDF2如何实现按照PDF页码提取后并另存为PDF格式文件?
浪漫的turtle,送给程序员自己的圣诞树!