python将资源打包进exe

这篇具有很好参考价值的文章主要介绍了python将资源打包进exe。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

分析

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

步骤

  • 这是我的项目结构
    python将资源打包进exe

图片资源在src下的img目录中,我在main.py中需要使用其中的图片。
python将资源打包进exe

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

结语

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

到了这里,关于python将资源打包进exe的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium查找网页如何处理网站资源一直加载非常卡或者失败的情况

    selenium获取一个网页,某个网页的资源卡了很久还没有加载成功,如何放弃这个卡的数据,继续往下走 有2钟方式。通常可以采用下面的方式一来处理这种情况 这种方式对于资源比较多比较复杂的网页比较合适,比如有些图片在国外,一直加载不出来。mail.com就是这样 当网页

    2024年02月03日
    浏览(34)
  • 【若依】前后端分离部署前端配置二级域名(部署到Nginx上,打开后一直显示正在加载系统资源)

    问题描述 最初部署前端文件到nginx上之后,打开页面却一直显示“正在加载系统资源,请耐心等待”字样,无法正常运行。研究后发现问题是由于服务器使用Nginx转发域名请求,无法使用根目录,所以对前端进行二级域名配置,修改代码如下: vue.config.js 其实若依给的注释里

    2024年02月03日
    浏览(35)
  • Windows断开映射磁盘提示“此网络连接不存在”,并且该磁盘的选项一直在资源管理器中

    1、打开注册表编辑器 快捷键win+R 打开“运行”, 输入 regedit 2、 删除下列注册表中和无法移除的磁盘相关的选项 HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerMountPoints2 我是之前挂载过ip地址为192.168.1.3的磁盘,所以把这个项目删除即可。  3、打开“任务管理器”,

    2024年02月11日
    浏览(38)
  • 报错:Error,关于运行localhost://8080/一直提示:“源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。“的可能问题集合。

    查看端口占用问题 查看Tomcat的安装问题及配置问题 查看web.xml是否缺少配置 查看网页内容引用路径问题 考虑是否权限问题 改端口号,比如改成:8888 ↓【找到Tomcat安装目录→conf文件夹→server.xml(记事本打开)→找到Connect port→修改8080】 (1)Tomcat计算机环境配置 【在官网

    2024年02月04日
    浏览(58)
  • 《数字图像处理-OpenCV/Python》连载(1)前言

    本书京东优惠购书链接:https://item.jd.com/14098452.html 写作背景 编写本书的初衷,源自作者学习数字图像处理的经历。 在创新实验班开设的专业创新教育课程中,我选择的是数字图像处理方向。老师向我推荐的教材是冈萨雷斯的《数字图像处理》。学习的开始阶段非常困难。教

    2024年02月11日
    浏览(33)
  • GameFramework:打包资源,打随app发布包,打包生成文件夹说明,上传资源至服务器,下载资源,GameFreamworkList.dat 与GameFrameworkVersion.dat

    左边为ab包,中间为ab包中内容,右边为项目中资源文件 点击save,SaveConfiguration,保存打包关系到ResourceCollection.xml中 是否使用文件系统,只能在xml中手动配置,代表下载完后会把几个零散的ab文件合成一个文件 1、AssetBundle 列表 AssetBundle列表(AssetBundle List)列出了项目中包含

    2023年04月08日
    浏览(47)
  • 打包工具动态资源动态引入

    上述写法本地能够正常访问图片,但是打包之后无法正常访问,将 boxHerf 换成下列写法即可解决 注意:new URL(url,import.meta.url) 中的参数 url ,不能如下面定义变量拼接 上述开发没问题,但是打包会报错,不支持 import.meta.url new URL() 创建一个新 URL 对象的语法:new URL(url, [base])

    2024年02月05日
    浏览(25)
  • [游戏开发][Unity]Assetbundle打包篇(2)打包资源配置篇

    打包与资源加载框架目录 可视化配置的方式有很多种,Json、XML、以及Unity内置的ScriptableObject序列化 配置文件里要有哪些内容呢,很显然,最重要的就是目标文件路径,其次是权重类型,权重类型有:必要打包型、被引用打包型、忽略类型。为何会有忽略类型呢,是因为我们

    2024年02月09日
    浏览(30)
  • webpack自动引入打包资源HtmlWebpackPlugin

    在之前的章节中我们每次打包完之后都是手动的在public/index.html中通过script的方式 手动 引入的dist/js/main.js文件。用过框架开发的小伙伴应该都有体会过,比如vue-cli,每次打包完我们直接将dist目录下的文件整个拷贝直接部署到服务器下就行了,不需要自己手动的再更改任何代码

    2024年02月09日
    浏览(27)
  • 逆向解Unity打包的代码和资源

            我之前说过用Unity打包发布apk包的时候要非常小心,加密和防逆向篡改,因为unity游戏太容易篡改或逆向出来了,所以代码混淆、加密等工作还是十分重要的。         这里我揪出来一个已经上线的棋牌游戏,根据解压缩apk后我发现有assetsbinDataManaged这个目录,

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包