使用pyinstaller打包遇到的几个问题

设置了icon图标的程序,打包后无法运行

原始程序是一个GUI程序,使用iconbitmap('tmp.ico')设置了icon图标,本地运行正常,但打包后无法运行(报错)。

解决方法是在程序执行时自动生成一个icon,然后用这个临时的icon文件作为GUI的图标。

temp_icon = os.path.join(tempfile.gettempdir(), 'tmp.ico')
with open(temp_icon, 'wb+') as tmp:
    tmp.write(base64.b64decode(Icon.img))
root.iconbitmap(temp_icon)

这里的Icon.img是一个类变量,类型是base64编码的字符串。也就是说要先将ico图标转换成base64编码的字符串,保存到这个类变量中。具体参考:Pyinstaller 打包 Tkinter 程序时引入图标解决方法

打包其他文件/文件夹到生成的程序中

由于程序引用了其他目录下的文件,pyinstaller无法自动的识别并打包他们,所以需要手动指定这些文件、文件夹,方法是修改打包时生成的spec文件,首先,先使用如下命令打包,会自动生成一个spec文件:

pyinstaller -F -w -i ico.ico run.py

-F 表示生成一个文件
-w 表示不显示命令行窗体(用在GUI程序上)
-i 指定icon 最后是入口py文件

然后,修改生成的spec文件的datas字段:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['run.py'],
             pathex=['D:\\PyCharm Projects\\xxx'],
             binaries=[],
             datas=[('D:\\PyCharm Projects\\xxx\\ss',  'ss')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='run',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False , icon='icon/ico.ico')

其中,datas=[('D:\\PyCharm Projects\\xxx\\ss', 'ss'),......],表示将’D:\PyCharm Projects\xxx\ss’目录打包,'ss’作为其在打包后的程序中的路径,即:(原项目中资源文件路径,打包后路径)

完成后,使用如下命令再次打包:

pyinstaller run.spec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值