解决pyinstaller打包过程中外部资源无法加载的问题 ...
Posted Python 集中营
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决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"\\
\\x00\\x01\\x14\\x4d\\
\\x89\\
\\x50\\x4e\\x47\\x0d\\x0a\\x1a\\x0a\\x00\\x00\\x00\\x0d\\x49\\x48\\x44\\x52\\x00\\
\\x00\\x01\\x44\\x00\\x00\\x01\\x41\\x08\\x06\\x00\\x00\\x00\\x0f\\x27\\xd6\\x75\\
\\x00\\x00\\x00\\x01\\x73\\x52\\x47\\x42\\x00\\xae\\xce\\x1c\\xe9\\x00\\x00\\x00\\
\\x04\\x67\\x41\\x4d\\x41\\x00\\x00\\xb1\\x8f\\x0b\\xfc\\x61\\x05\\x00\\x00\\x00\\
\\x09\\x70\\x48\\x59\\x73\\x00\\x00\\x0e\\xc3\\x00\\x00\\x0e\\xc3\\x01\\xc7\\x6f\\
\\xa8\\x64\\x00\\x00\\xff\\xa5\\x49\\x44\\x41\\x54\\x78\\x5e\\xec\\xbd\\x07\\xbc\\
\\x56\\xc5\\x96\\xe6\\x3d\\xf3\\x4d\\xce\\x3d\\x33\\x3d\\xb7\\xbb\\x67\\xfa\\x76\\
\\x98\\xee\\xb9\\xdd\\xf7\\x5e\\xf5\\x9a\\x23\\x8a\\x59\\x89\\x06\\x10\\x73\\x44\\
最后,还需要将我们生成的资源文件 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,送给程序员自己的圣诞树!
以上是关于解决pyinstaller打包过程中外部资源无法加载的问题 ...的主要内容,如果未能解决你的问题,请参考以下文章
python 中 使用 pyinstaller 打包的exe程序如何调用外部模块?