前言
欢迎来到我的博客
个人主页:北岭敲键盘的荒漠猫-优快云博客
本文记录一个pyinstaller打包后程序无法找到指定文件的解决方案
问题描述
我们有一个程序,会播放一张照片。
现在我们要把他打包成exe文件,但是又不希望图片在外面引用,希望最终程序只有一个exe,所以我们用了pyinstaller的
--add-data "文件路径;打包后exe中的虚拟路径"
来实现,这个功能。
但是打包好的程序会出现这个问题。
我们虽然打包进入了111.png,但是我们引用不了。
原理分析
这是因为我们打包的文件在程序运行中会解压在系统临时文件夹中,而我们的exe在我们看到的文件夹中,所以找不到111
解决思路
我们可以用以下代码找到临时文件夹中的文件。
import os
import sys
def resource_path(relative_path):
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
print(resource_path("111.png"))
改良之后打包即可解决问题。
import os
import sys
def resource_path(relative_path):
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
path=resource_path("111.png")
os.startfile(path)
当然这种方法还会出现找不到文件的问题
因为程序结束之后,我们临时文件夹中的文件会被清除,而我们执行了打开文件之后的命令后程序就会结束,所以图片被清理导致无法打开图片。
所以后面可以添加一个time等待即可。