python将资源打包进exe

前言

之前py打包的exe一直是不涉及图片等资源的,直到我引入图片后打包,再双击exe发现直接提示未找到资源。

分析

我py代码中的图片引入使用的是项目相对路径,打包时pyinstaller只会引入py模块,这种路径引入的资源其实是不会打包进exe的。有人想的是可以直接将资源放到exe旁边,但这不是最优雅的方法,你发布exe还得给人家一堆相关资源文件,其实想要解决此类无法打包资源的问题其实只需要做两件事:1、修改spec打包配置。2、动态获取资源路径。

步骤

  • 这是我的项目结构

    图片资源在src下的img目录中,我在main.py中需要使用其中的图片。
  • 在main.py中定义动态获取资源路径的函数
#获取资源路径
def getPath(relative_path):
    # 判断是否为frozen状态(即为打包运行状态)
    if getattr(sys, 'frozen', False):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)# 返回真实路径

我们需要先获取项目当前状态,判断是否为frozen状态(即为打包运行状态),是的话先获取 MEIPASS路径(MEIPASS为双击exe时系统分配的临时工作目录),不是的话直接获取绝对路径,最后返回真实路径。

  • 在需要获取路径的地方直接使用getPath即可,比如我要修改exe窗体图标,这样即可:
root.iconbitmap(getPath(os.path.join("src","img/logo.ico")))

我要在tk界面使用Label添加图片,这样即可:

imgImg = ImageTk.PhotoImage(Image.open(getPath(os.path.join("src","img/img.png"))))
Label(imgFrame,image=imgImg).grid(column = 0,row = 0)
  • 最后修改spec打包配置(不懂spec的看这儿:https://xiblogs.top/?id=57 )中Analysis的datas:

    datas中第一个src表示你需要打包的资源目录,第二个src表示打包成exe后双击exe时释放资源在MEIPASS目录下的具体位置,这是我打包运行时系统释放资源的位置,你可以看到src就在这里,exe中的图片也加载进界面了:

结语

值得注意的是该目录打开exe即生成,关闭exe即删除,不可在此长久保存文件。类似于我篇文章(https://xiblogs.top/?id=65 )修改exe图标使用base64转换ico的逻辑,当然,你现在可以直接使用MEIPASS来处理了。
原文链接:https://xiblogs.top/?id=66

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/238688.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

terser

环境: 一、使用vueCli创建的项目的vue.config.js 添加terser配置 验证了在打包后生成的.js文件中确实没有了console.log() 这里的.js.map可以省略,公司里代码打包后就没有.js.map文件了 要配置下除去.js.map文件或者统一分到.map文件夹里 二、vite 安…

【腾讯云HAI域探密】- HAI为NPL保驾护航

近些年,随着机器学习技术的蓬勃发展,以GPU为代表的一系列专用芯片以优越的高性能计算能力和愈发低廉的成本,在机器学习领域得到广泛认可和青睐。GPU等专用芯片以较低的成本提供海量算力,已经成为机器学习和AI人工智能领域的核心利…

分层自动化测试的实战思考!

自动化测试的分层模型 自动化测试的分层模型,我们应该已经很熟悉了,按照分层测试理念,自动化测试的投入产出应该是一个金字塔模型。越是向下,投入/产出比就越高,但开展的难易程度/成本和技术要求就越高,但…

QX320F28335,DSP,国产芯片崛起之路

QX320F28335 32位单核CPU 主频150MHz 单精度浮点运算FPU 12位ADC 采样率 4MSPS 12个ePWM 6个HRPWM

测试:面试问题(多精全)

目录 面试问题 1,你们原来项目的测试流程是怎么样的? 2,你介绍下,你最熟悉的项目? 3,你们原来项目的主要的功能模块有哪些,你主要负责哪些模块? 4,你说原来充值…

Python从入门到精通四:Python循环语句

前言 循环普遍存在于日常生活中,同样,在程序中,循环功能也是至关重要的基础功能。 为什么学习循环语句 循环在程序中同判断一样,也是广泛存在的,是非常多功能实现的基础: while循环的基础语法 学习目标&…

⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ InnoDB存储引擎 ⑩⑧【MySQL】详解InnoDB存储引…

vue3的组件事件和defineEmits

文章目录 1. 事件基础示例Blog.vueBlogPost.vue 2. 触发与监听事件2.1 触发事件2.2 监听事件 3. 事件参数3.1 示例1Blog.vueBlogPost.vue 3.2 示例2(defineEmits)MyComponent.vueTest.vue 4. 声明触发的事件5. 事件校验示例1Blog.vueBlogPost.vue 示例2&…

【ChatGLM3-6B】Docker下快速部署

【ChatGLM2-6B】小白入门及Docker下部署 前提下载安装包网盘地址 开始安装加载镜像启动镜像进入容器启动模型交互页面访问页面地址 前提 安装好了docker安装好了NVIDIA显卡16G 下载安装包 网盘地址 ​ 这里因为网盘上传文件有大小限制,所以使用了分卷压缩的方式…

Adobe的3D建模工具Substance 3D Painter 9.1.1 版本下载与安装

目录 前言一、Substance 3D Painter 9.1.1安装二、使用配置总结 前言 Adobe的Substance 3D Painter是一款强大的3D建模和纹理创建工具,专为数字艺术家设计,尤其是3D画家、游戏设计师和视觉特效艺术家。注:文末附有下载链接! 这款…

【gerrit上放弃提交代码】

在gerrit上点击abandon 项目文件夹下打开git USER871058FHA-W4300461 MINGW64 /d/Users/USER871058/IdeaProjects/cda_cem (feature_fix_point_1208) $ git reset --soft HEAD^回到idea即可

电子签测评!审批流程电子签章的代表产品

随着大家对电子文件法律效力的愈发重视,这两年,市面上各种各样的电子签名产品是层出不穷啊。 法大大、E签宝、微签、契约锁各树一帜,腾讯、阿里、字节三巨头也纷纷入局。 几家头部厂家陷入了同质化的竞争,在各个领域使出浑身解数…

Sci Transl Med

今天给同学们分享一篇实验文章“Radiation-induced circulating myeloid-derived suppressor cells induce systemic lymphopenia after chemoradiotherapy in patients with glioblastoma”,这篇文章发表在Sci Transl Med期刊上,影响因子为17.1。 结果解…

windows下安装git中文版客户端

下载git Windows客户端 git客户端下载地址:Git - Downloads 我这里下载的是Git-2.14.0-64-bit.exe版本 下载TortoiseGit TortoiseGit客户端下载地址:Download – TortoiseGit – Windows Shell Interface to Git TortoiseGit客户端要下载两个&#…

用Sketch for Mac轻松创作无限可能的矢量绘图

在如今的数码时代,矢量绘图软件成为了许多设计师和创意爱好者的必备工具。而在众多的矢量绘图软件中,Sketch for Mac无疑是最受欢迎的一款。它以其简洁易用的界面和强大的功能,让用户能够轻松创作出无限可能的矢量图形。 首先,Sk…

vue2-使用axios获取外网ip

1.安装axios>npm i axios 或者yarn add axios 或者pnpm i axios */ 报错:一直info There appears to be trouble with your network connection. Retrying... 原因:网络不好 2.引入axios:import axios from axios 3.使用axios调用接口ht…

基于ssm四六级报名与成绩查询系统论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对四六级报名信息管理混乱,出错率高,信息安全性…

uniapp uview实现u-popup左侧弹起时铺满屏幕

效果如图: 代码如下: <u-popup :show="sign.signParams.show" mode="left" width="100%" height="100%" border-radius="0":mask-close-able="false">XXXXXXX内容xxxxx</u-popup>使用了 mode=“left”…

Nature | 中国陆地的碳汇量有多少?

文献信息 题目&#xff1a; The size of the land carbon sink in China 来源&#xff1a; Nature 时间&#xff1a;2022DOI&#xff1a; https://doi.org/10.1038/s41586-021-04255-y 主要内容 中国人为排放的很大一部分已经被其土地碳汇抵消&#xff0c;这是到2060年实现…

深度学习 Day11——T11优化器对比实验

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言一、我的环境二、代码实现与执行结果1.引入库2.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;3.导入数据4.查…