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(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__':
    name = input("你想转化的图片的完整文件名:")
    pic2py(name)

#使用方式如下

'''
from in_ico import img
...
tmp = open('in.ico', 'wb')
tmp.write(base64.b64decode(img))
tmp.close()

#使用图片

os.remove('in.ico')
'''

②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,
               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文件,原路径上图片删除或转移)

你可能感兴趣的:(Python中的图片打包与pyinstaller中的spec文件简介)