前言

之前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

python将资源打包进exe的更多相关文章

  1. 控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

    原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版) 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个e ...

  2. Python Windows下打包成exe文件

    Python Windows 下打包成exe文件,使用PyInstaller 软件环境: 1.OS:Win10 64 位 2.Python 3.7 3.安装PyInstaller 先检查是否已安装Py ...

  3. python爬虫程序打包为exe程序并在控制台下运行

    上一篇文章实现了爬取任意两个用户共同想读的图书的python程序.现在此程序打包为exe程序. 使用pyinstaller实现此功能.在pyinstaller官网下载http://www.pyinst ...

  4. python开发环境配置和python源码打包生成exe可执行文件

    Windows下开发环境准备 1.分别安装:python2和python32.安装Python的集成工具:Anaconda3.安装Pycharm Pycharm设置 设置: File->Sett ...

  5. python多进程程序打包成exe的问题

    粘贴一下部分的多进程代码 if __name__ == '__main__': """"流程模拟""" multiprocessi ...

  6. python用pyinstaller打包成exe文件

    版本为Python2.7 一.安装Pyinstaller 1.安装pywin32 下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的pywin32,下载后安装  使用pip命 ...

  7. Python | 用Pyinstaller打包发布exe应用

    参考:https://jingyan.baidu.com/article/a378c960b47034b3282830bb.html https://ask.csdn.net/questions/72 ...

  8. 利用cxfreeze将Python 3.3打包成exe程序

    参考自别人的博文:http://blog.csdn.net/yatere/article/details/6667230 步骤如下: (1) 下载cxfreeze后安装(先得安装python 3.3) ...

  9. 将Python执行代码打包成exe可执行文件

    安装pyinstaller pip3 install pyinstaller 进入py文件目录,执行以下指令 pyinstaller -F -w <文件名.py>,-F代表生成可执行文件, ...

  10. python把源代码打包成.exe文件

    1.在windows命令行把当前文件夹用cd命令切换到源代码所在文件夹. 2.输入命令:pyinstaller -w -F main.py

随机推荐

  1. Python数据分析方法与技巧

    背景介绍 数据分析是数据科学领域的核心技能之一,它涉及到数据的收集.清洗.处理.分析和可视化. 数据分析是指通过收集.清洗.处理.分析和可视化数据来发现隐藏的模式.趋势和关系的过程. 数据分析是数据科 ...

  2. BootStrap Table 添加序列号

    js $('#table').bootstrapTable({ striped: true,//隔行换色 columns: [ { field: '', title: '序号', sortable: ...

  3. CF580C

    说句实话,这道题作为蓝题过于简单了一点 #include<iostream> #include<utility> #include<vector> using na ...

  4. vue pinia sessionstorage 数据存储不上的原因

    vue pinia sessionstorage 的坑 默认的配置是开始 localStorage 如果用 sessionstorage 则发现数据存储不上 ,是因为缺少了序列化和反序列化 impor ...

  5. 【Shiro】01 概述 & 快速上手

    什么是Shiro? Apache Shiro 是Java的一个权限安全框架 一些功能:认证.授权.加密.会话管理.与Web 集成.缓存等   Shiro官网地址:[ 点击访问 ] http://shi ...

  6. 2023年人工智能发展现状报告:State of AI Report 2023

    链接: https://www.stateof.ai/ ================================ Now in its sixth year, the State of AI ...

  7. maven实战教程-含视频讲解

    1.背景 2.什么是maven? 通俗的说就是,不用手动拷贝jar包,帮我们管理项目结构,只需要配置坐标,自动从中央仓库下载(其他介绍请百度...). 3.Maven的安装与配置 注意:Maven在使 ...

  8. 洛谷P1842 [USACO05NOV] 奶牛玩杂技

    [USACO05NOV] 奶牛玩杂技 题目背景 Farmer John 养了 \(N\) 头牛,她们已经按 \(1\sim N\) 依次编上了号.FJ 所不知道的是,他的所有牛都梦想着从农场逃走,去参 ...

  9. 洛谷P1226 【模板】快速幂

    1.快速幂模板 前置知识 一个数字n,它的二进制位数一定是log2n向下取整+1: 快速幂模板代码 这段代码实现了快速幂算法(Exponentiation by squaring),用来计算 ( an ...

  10. vue3:setup语法糖使用教程

    setup语法糖简介 直接在script标签中添加setup属性就可以直接使用setup语法糖了. 使用setup语法糖后,不用写setup函数:组件只需要引入不需要注册:属性和方法也不需要再返回,可 ...