Pyinstaller打包exe,丢失图标等问题

一、原因

exe运行时会解压一个名为'_MEI*'的资源文件夹到电脑的临时目录,程序结束时删除。

程序里使用'\图标.png'这样的路径,exe运行时只会搜自己所在目录,当然找不到。

二、解决方案

1、确保图片在这个临时资源文件夹里

这个可以通过修'.spec'配置文件,将图片添加进去。

(注:.spec就是Pyinstaller上次打包生成的文件,在你的python项目目录下。)

这是我用到的三个图片,其实就是加三条元组到'binaries'列表中

逗号前是图片在python项目里的地址,逗号后是打包进'_MEI*'临时文件夹的地址。

我是里边建了一个'img'文件夹存放图片,如直接放根目录用点就行,如('./img/info.png','.')

最后,打包时运行pyinstaller 程序入口.spec,就可以将图片资源添加进去了。

(注:其它外部资源也可以这样添加,比如.ini、.txt、.exe等等)

2、确保程序能找到这个路径

因为每次临时目录的名字都不一样,所以需要一个能动态获取这个路径的方法。

def getRealPath(s):
# 获取exe解压目录的绝对路径
import os, sys
p = os.path.realpath(sys.path[0])
p = p.replace(r'\base_library.zip', '')
p = p + s
return p s=r'\img\info.png'
realPath=getRealPath(s)
print(realPath)

代码奉上,核心语句是'os.path.realpath(sys.path[0])'。

Python运行效果如下:

C:\Users\GuoDaXia\Anaconda3\envs\temp\python.exe D:/untitled1/测试.py
D:\untitled1\img\info.png Process finished with exit code 0

打包成exe,拖到cmd窗口里运行试试吧。

Pyinstaller打包exe,丢失图标等问题的更多相关文章

  1. 利用PyInstaller打包exe文件

    前言 平常我们通过Python写完一些小脚本之后,如果使用不频繁的话,一般会选择在DOS界面直接跑脚本,或者在IDE中运行.但当我们需要频繁使用某些脚本,或者在没有Python环境的机器上也能顺利运行 ...

  2. Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案

    最近用PyQt5写了一个界面小程序,需要打包成exe给到其他windows上使用,一开始使用python 3.7 64位,用pyinstaller打包exe,在64位机上运行正常. 但是目标电脑是32 ...

  3. Python: pyinstaller打包exe(含file version信息)

    最近项目上一直都是用Spyder直接运行.py文件的方式来执行每日的自动化程序,每天都要手动去点击Run来执行一次,所以考虑把.py文件直接打包成exe,然后用windows的task schedul ...

  4. pyinstaller 打包exe程序读不到配置文件No such file

    挺久没更新博客的,一来之前是觉得才疏学浅,记录下来的太简单没人看.二来时间上不是很充裕(不是借口,有时间打游戏,没时间总结) 偶然有一次发现同事在搜索解决问题的时候正在看我博客的解决思路,很奇妙的感觉 ...

  5. python pyinstaller 打包exe报错

    今天用python 使用pyinstaller打包exe出现错误 环境pyqt5 + python3.6 在导入pyqt5包之前加上如下代码 import sysimport osif hasattr ...

  6. pyinstaller打包exe文件,运行时一闪而过

    pyinstaller打包exe文件出现命令窗口一闪而过 原因:exe运行过程中出错了,解决这些错误就可以了 解决方法: 通过 cd path >> xxx.exe 在命令行中运行exe文 ...

  7. pyinstaller 打包exe可执行文件

    Python打包EXE方法之一 一.安装Pyinstaller 1.安装pywin32 下载安装文件:查找到跟自己适用的python版本及window系统版本匹配的pywin32,下载后安装 使用pi ...

  8. 【解决方案】Pyinstaller打包exe策略(简单实用)

    场景说明 在业务场景中, 经常需要Python开发一些小程序/脚本/GUI界面,进行简单的项目测试或未安装Python 的小伙伴们使用. 使用Pyinstaller将Python脚本或者项目打包,生成 ...

  9. pyinstaller打包exe程序各种坑!!!

    pyinstaller打包python成exe可执行程序,各种报错,各种坑,在次记录下 一.pyinstaller打包报错for real_module_name, six_moduleAttribu ...

随机推荐

  1. pymysql总结

    一.创建数据库 import pymysql conn = pymysql.connect(host='ip', user='root', password='密码') # 以字典的形式返回操作结果 ...

  2. RocketMQ 实战之快速入门

    原文地址:https://www.jianshu.com/p/824066d70da8 最近 RocketMQ 刚刚上生产环境,闲暇之时在这里做一些分享,主要目的是让初学者能快速上手RocketMQ. ...

  3. 使用Azure CLI创建Linux虚拟机

    Azure提供了三种方式创建虚拟机,分别是Azure CLI.Azure PowerShell和Azure门户.本文介绍使用Azure CLI来创建Linux虚拟机. 使用Azure CLI创建Lin ...

  4. Dynamics CRM Tips

    这里是作为开发中遇到的各式各样的问题的总结贴. 如果对Dynamics CRM 开发有兴趣, 请参考Step by Step 开发dynamics CRM 移除sitemap中的entity 从O36 ...

  5. 浅谈JS异步(asychrouous)

    一.概念 (1)asychronous 异步 是JS这种单线程语言解决多任务的一种方法,将耗时的任务(io)设定为异步工作,先交给浏览器负责相关功能的线程来实现耗时的部分工作,按顺序放入任务队列中,等 ...

  6. [模板]线性递推+BM

    暴力版本: #include<bits/stdc++.h> #define mod 998244353 using namespace std; typedef long long int ...

  7. [C语言学习笔记二] extern 函数的用法

    extern 用来定义一个或多个变量.其后跟数据类型名和初始值.例如: extern int a =10 它与 int,long long int,double,char的本质区别,在于 extern ...

  8. springboot开发之使用外部servlet容器及对jsp的支持

    一般而言,springboot是使用自己内嵌的servlet容器,比如tomcat等等,而且默认的模板引擎是thymeleaf,那么如何让springboot使用外部的servlet容器并支持对jsp ...

  9. Docker基础内容之镜像

    概念 镜像是一个包含程序运行必要依赖环境和代码的只读文件,它采用分层的文件系统,将每一次改变以读写层的形式增加到原来的只读文件上.镜像是容器运行的基石. 下图展示的是Docker镜像的系统结构.其中, ...

  10. pycharm 选中单列快捷键

    直接键入 Alt + Shift +Insert 一次后就可以选中单列 再次键入就改回选中整行 如图: 第一键入 第二次键入