在使用python打包.py文件时,如果我们在代码中使用到了图片,那么在打包成功后,运行.exe文件时会提示
Failed to execute script xxx
的错误,当我们自定义了python package并且想要打包.py文件时它们又该怎么办呢?下面请听WBB娓娓道来!!!
1. python代码中用到的图片如何打包到.exe可执行文件中
因为我们在使用pyinstaller对.py文件进行打包时,其不会将图片打包进去,所以我们要把图片转换为base64码,并将其放到.py文件中,在我们使用的时候直接导入(和导包差不多)然后再将其解码为图片就可以了
详细步骤
- 将图片转换为base64码并且保存到.py文件中,代码如下:
import base64
def transform(picture_name):
#将图片转换问base64码
open_pic = open("%s" % picture_name, 'rb')
b64str = base64.b64encode(open_pic.read())
open_pic.close()
# 注意这边b64str一定要加上.decode()
write_data = 'img = "%s"' % b64str.decode()
f = open('%s.py' % picture_name.replace('.', '_'), 'w+')
f.write(write_data)
f.close()
if __name__ == '__main__':
pics = ["a.ico", "b.ico", "c.jpg", "d.jpg", "e.jpg"]#这是5张图片
for i in pics:
transform(i)
print("ok")
-
运行结果(生成五个图片的.py文件)
-
.py文件中的内容为img=base64码
-
在使用时将其转换为图片,具体代码如下:
from 自定义的包名 import 图片的.py文件名 as b
def decodepicture(a,b,c):#a为图片的临时存放路径,b为图片的base64码,c为图片的.扩展名
tmp = open(a+c, 'wb')
tmp.write(base64.b64decode(b))
tmp.close()
decodepicture('具体路经',b.img,'.图片的后缀') #注意图片的base64码是b.img,图片的后缀别忘了'.'
注意:为了使打包后的.exe文件兼容有各种盘符的PC,图片的临时存放路径最好使用os.getcwd()自动获取(获取到的路径为用户.exe文件的存放路径)
- 我们在打包的时候将包含图片base64码的.py文件也一起打包进.exe文件,这样图片的打包就实现了
- 程序运行结束之后将临时生成的图片删除,代码如下:
def close_windows(path):
ls = os.listdir(path)#获取该文件夹下所有图片的名称
for i in ls:
c_path = os.path.join(path, i)#把路径和图片的名称进行拼接
if os.path.isdir(c_path):#判断是否为文件夹
del_file(c_path)
else:
os.remove(c_path)
2.自定义了python package如何打包到.exe可执行文件中
在很多时候我们会自己创建python package,但是我们在用pyinstaller打包的时候他只会将python内置的和我们下载的第三方库进行打包,而我们自定义的包该怎么办呢?
详细步骤
-
找到 python的安装路径,如果找不到可以看下图:
-
找到python的安装路径后,进入python安装路径下的Lib\site-packages目录,将自定义的python package拷贝到该目录下(注意:是自定义python package整个文件夹)如下图的bao:
-
拷贝完成后即可对.py文件进行打包,可参考pyinstalller,pyinstaller的安装可参考pyinstaller安装
好了,WBB就先介绍到这里了,有什么地方WBB讲解的不是很清楚的话,大家可以评论留言,如果有帮助到各位博友的话,也希望大家可以点个赞,加个关注哦!!!