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. Selenium的简单使用

    selenium的使用对于新手来说十分友好,因为他避开了如今网络中的异步加载抓取的困扰,使得我们大部分的时间可以用于提取信息和存储中,下面就简单的列一些使用的代码,希望给同样初学的你有一定的参考价值. ...

  2. 痞子衡嵌入式:ARM Cortex-M内核那些事(3.2)- 安全模块看特性(M23/33/35P)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M功能模块,不过侧重点是三款安全特性处理器. ARM Cortex-M处理器家族发展至今(2020),已有8代产品 ...

  3. 使用整体模型模板辅助器 Using Whole-Model Templated Helpers 模板辅助器方法 精通ASP.NET MVC 5

    怎么会

  4. python中的dumps和loads区别

    一.概念理解 json是一种轻量级的数据交换格式,对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:{"name":"cct ...

  5. C语言的安装及使用

    安装 vc6.0 使用方法 new    ---  win32 Console Application ---  ok-ok     ------c++ Source File      ------ ...

  6. Linux中inode详解

    转自:https://www.cnblogs.com/itech/archive/2012/05/15/2502284.html 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在 ...

  7. 【阿里云IoT+YF3300】13.阿里云IoT Studio WEB监控界面构建

    Web可视化开发是阿里云IoT Studio中比较重要的一个功能,通过可视化拖拽的方式,方便地将各种图表组件与设备相关的数据源关联,无需编程,即可将物联网平台上接入的设备数据可视化展现. 目前支持的组 ...

  8. python3中的继承和多态

    *继承 当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super clas ...

  9. qt客户端程序使用svg图片资源的几种方法

    直接使用svg格式文件资源的情况 1. 直接在UI控件属性面板中选择部分支持icon图标的控件的icon来源,这样图标可以显示 2.给toolbutton添加样式 qproperty-icon: ur ...

  10. ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错

    ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错. 安装pyenv后,在pyenv环境内安装 anaconda,然后再安装tensorflow不再报错,比较奇怪, ...