解决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,送给程序员自己的圣诞树!

欢迎关注作者公众号【Python 集中营】,专注于后端编程,每天更新技术干货,不定时分享各类资料!

以上是关于解决pyinstaller打包过程中外部资源无法加载的问题 ...的主要内容,如果未能解决你的问题,请参考以下文章

python 中 使用 pyinstaller 打包的exe程序如何调用外部模块?

python打包pyinstaller支持window和linux下使用

Pyinstaller打包

记录Pyinstaller 打包的坑

pyinstaller的打包使用

pyinstaller打包资源文件及包含eyed3模块时提示找不到libmagic处理