Python中的图⽚打包与pyinstaller中的spec⽂件简介⼀.Python中的图⽚打包
1.经过科学搜索后有以下⼏种打包⽅式:
①将图⽚转化为py⽂件中的变量,通过import该⽂件来⽣成需要的图⽚,使⽤后移除图⽚
(该⽅法可以通过库base64和wxpython实现)
②将图⽚放在同⼀⽬录下的⽂件夹中,随程序⼀起使⽤
③使⽤⼯具对exe⽂件和图⽚进⾏⼆次打包
可能还有其他⽅式,在此只列取这⼏种
2.本⼈⽐较懒,选择的是较为⽅便好看的第⼀种⽅式,其他⽅式就不讨论了:
①base64
将图⽚转化为base64编码的py⽂件中的变量
import base64
def pic2py(picture_name):
open_pic = open("%s" % picture_name, 'rb')
b64str = base64.b64encode(ad())
open_pic.close()
# 注意这边b64str⼀定要加上.decode()
write_data = 'img = "%s"' % b64str.decode()
f = open('%s.py' % place('.', '_'), 'w+')
f.write(write_data)
f.close()
if __name__ == '__main__':
name = input("你想转化的图⽚的完整⽂件名:")
pic2py(name)
#使⽤⽅式如下
'''
from in_ico import img
...
tmp = open('in.ico', 'wb')
tmp.write(base64.b64decode(img))
tmp.close()
#使⽤图⽚
'''
②wxpython
安装wxpython库后,在命令框中使⽤命令:
python img2py.py -n = 引⽤图⽚名(含格式) -i = ⽣成py⽂件名(含.py)
得到⼀个py⽂件,图⽚已转化为该⽂件中的⼀个⼆进制编码的变量,通过类似上⼀种⽅法中的使⽤⽅法,解码后即可使⽤
⼆.pyinstaller中的spec⽂件
1.可以在了解⼀下
简单介绍:
通过pyi-makespec name.py命令来⽣成⼀个⾃定义的spec⽂件
# -*- mode: python -*-
block_cipher = None
a = Analysis(['name.py'],
pathex=['D:\\ME'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='name',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
cipher命令
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='name')
spec⽂件分为Analysis, pyz, exe, coll四个部分
①Analysis:⾸先是需要打包的py⽂件,通过⼀个字符串列表储存;然后是py⽂件的路径;datas是需要引⽤的⽂件(图⽚等)
②exe:要⽣成exe⽂件时,name是exe⽂件的名字, console是是否在打开exe⽂件时打开命令框
③coll:收集前三个部分的内容进⾏整合
pyinstaller通过最开始⽣成的spec⽂件进⾏打包,也可以⾃定义spec⽂件后,使⽤pyinstaller -F name.spec命令来打包
2.打包后的spec⽂件
如果使⽤了--add-data命令后, 在Analysis中的datas中出现引⽤的图⽚的名称;使⽤-i 命令后,在exe在最后会出现icon = 图标名。注意:使⽤--add-data命令时,使⽤⽅式如:--add-data 图⽚名;位置(同⼀⽬录下可以⽤.)
该命令可以打包使⽤绝对路径引⽤的图⽚,但⼀旦通过该路径不到图⽚时即会报错(如在其他电脑上打开exe⽂件,原路径上图⽚删除或转移)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。