Pyinstaller打包exe附带图片的方法

Pyinstaller打包exe附带图片的方法2019.10.27更新在最近的wordpress项目中学到了图片字节码可在文件中存在,于是我做了试验并成功了(就是代码里带一堆字节码……)参考:https://blog.csdn.net/jss19940414/article/details/85841982https://www.cnblogs.com/xianqingsong/p/9965899.htmlhttps://…

大家好,又见面了,我是你们的朋友全栈君。


2019.10.27更新

在最近的wordpress项目中学到了图片字节码可在文件中存在,于是我做了试验并成功了(就是代码里带一堆字节码……)

参考:

https://blog.csdn.net/jss19940414/article/details/85841982

https://www.cnblogs.com/xianqingsong/p/9965899.html

https://blog.csdn.net/u013055678/article/details/71406746

这是将路径下图片编码再解码保存的例子:

import os, base64
 
with open("D:\\XiutuDog\\_pic.png","rb") as f:
    # b64encode是编码,b64decode是解码
    base64_data = base64.b64encode(f.read())
    print(base64_data)#输出生成的base64码

#img_str = 'abcdefgh12345oK='#比如生成后的码就这么放,替换下面的base64_data即可
img_data = base64.b64decode(base64_data)
# 注意:如果是"data:image/jpg:base64,",那你保存的就要以png格式,如果是"data:image/png:base64,"那你保存的时候就以jpg格式。
with open('001.png', 'wb') as f:
      f.write(img_data)

把经过编码后的base64_data(输出的)放在代码里,再解码写到文件夹里实现“释放”【在被注释的img_str哪里】,虽然方法比较笨,但是这是实在的“exe附带图片”!


2018.10.13附加

原来下面这个方法是把图片存到绝对路径了(存同文件夹是相对路径……),所以放哪都能用……现在没卵用,我再去找方法吧……

pyinstaller打包运行报错failed to execute script main(也有可能是图片路径没找到)https://blog.csdn.net/jeff_/article/details/72907113


原文:

毕设写的工具最近才想起来应该做成个exe造福大众,奈何路途曲折

先是vs直接装的pyinstaller不管用;后是不知如何打多个文件的项目(最后写在一个.py里了……还有import的包尽量减少了);最后是图片文件不会打包在一起,让我有种擦屎擦不干净的不爽的感觉——一个小exe还必须和几个固定命名的图片在一个文件夹内不然打不开!!

 

今天看了看了不少帖子,方法有的简单但是不成功;有的麻烦,要改的东西有点多就不想尝试;最后看着错误提示加思考终于成功的打了个exe!

 

pyinstaller的安装:

参照(很好的帖子)https://blog.csdn.net/lqzdreamer/article/details/77917493

单个exe啥也不用的话,下面的命令就够了。

pyinstaller -F test.py

打包python 加icon 去掉cmd黑窗口 https://blog.csdn.net/frank_good/article/details/60962012

python pyinstaller.py -F -p C:\python27; -i .\xxx.ico .\demo.py --noconsole

 

接下来介绍打包图片的方法。

开始是参考https://blog.csdn.net/qq744746842/article/details/49404027的,但是后来尝试失败,

pyinstaller options name.spec

这句代码执行不了啊……

 

本教程完整过程开始:

生成spec文件:

Pyinstaller打包exe附带图片的方法这是我要打包的东西。(接下来的文件名都参照这个)

然后cmd到这个目录,(我是当前文件夹直接按住shift+右键,单击“在此处打开powershell窗口”,效果一样还方便)

在cmd里输入 :

 pyi-makespec FP.py

会生成一个FP.spec

Pyinstaller打包exe附带图片的方法

然后改FP.spec里面的东西,下面是原样

Pyinstaller打包exe附带图片的方法

直接打这个文件的包出来的是……如下,我可不想把工具做的这么复杂……

Pyinstaller打包exe附带图片的方法

接下来就是改里面的东西,(如果不想用这种办法,另一种是https://blog.csdn.net/jirryzhang/article/details/78881512里的是用指令来做,而且直接是单个exe)

 

.py图片引用完整路径

改之前,需要把你python程序里的所有的图片引用换成完整的路径:

Pyinstaller打包exe附带图片的方法

代码里就这么用图片喽……

Pyinstaller打包exe附带图片的方法

此方法有参照http://tieba.baidu.com/p/3060401749的第6楼(看他jia加的函数,就是获取完整路径而已),再加再一篇帖子里看到“pyinstaller不是将代码编译,而是将脚本弄成可以执行的文件,所以别想能打包后程序变快”,由此猜想到“图片需要完整路径,spec文件里也要写上完整路径,这样就能让这个exe‘接轨’运行起来”

 

开始改spec文件:

方法有参考 https://blog.csdn.net/xinyingzai/article/details/80282856

 

但是datas并不是datas+=[(‘_pic.png’,’D:\\XiutuDog\\_pic.png’,’DATA’)],会报错“expected tuple,not list”,

于是我是这么改的datas+=((‘_pic.png’,’D:\\XiutuDog\\_pic.png’,’DATA’))

Pyinstaller打包exe附带图片的方法

红框是三张我需要的图片,格式是 ((‘名字1′,’1的完整路径’,’类型’),(‘名字2′,’2的完整路径’,’类型’))

左边的橙色箭头是是否显示控制台的cmd黑框

右边的橙色箭头是加上去的,可以给自己的exe换图标【但是离开文件夹就不是这个图标了,现在还没解决】

全文如下:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['FP.py'],
             pathex=['D:\\XiutuDog'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
			 
a.datas +=(('_icon.ico','D:\\XiutuDog\\_icon.ico','DATA'),
('_pic.png','D:\\XiutuDog\\_pic.png','DATA'),
('_start.png','D:\\XiutuDog\\_start.png','DATA'))

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [('_icon.ico','D:\\XiutuDog\\_icon.ico','DATA')],
          name='FP',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=False , icon='_icon.ico')

 

开始打包

与通常不同,这次的对象是之前改过的.spec文件,而不是.py文件

pyinstaller  -F  FP.spec

有个坑:如果刚改完.spec,手贱打了个 pyinstaller -F test.py ,那么.spec文件可就被改成默认的了!

完成后应当是这样的(FP.exe是从dist文件夹复制出来的,【dist文件夹内就是打包好的exe】

Pyinstaller打包exe附带图片的方法

那个exe,离开了图标所在的文件夹可能会变回原来的默认图标,一会儿后会恢复……

 

 

但是无论如何,可以脱离图片运行了o(* ̄▽ ̄*)ブ

Pyinstaller打包exe附带图片的方法

 

部分其他参考

https://blog.csdn.net/xueyuanlzh/article/details/79892968

https://blog.csdn.net/lion_cui/article/details/51329497(图片转py,觉得麻烦,没用它)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147721.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 盘点购物分享系统,有兴趣的来看看哦

    盘点购物分享系统,有兴趣的来看看哦最近蘑菇街,美丽说等购物分享的火爆。社会化电子商兴起。很多站长看到了市场。你是不是也想做个这类的网站倒是可以接着往下看。现在主流的购物分享系统有方维,拼品,拼图秀,爱图谱,乐兔淘,花世界等。1.方维购物分享系统:现在网上用的较多购物分享系统,比较像蘑菇街的类型。功能较全面,操作起来就是有点复杂,搞了好久才搞定她,不过你可以再网上下载说明书。开发的配套也…

  • Maven下C3P0连接池配置及使用

    Maven下C3P0连接池配置及使用1.在pom.xml文件中导入jar包同时不要忘记jdbc包,否则会报错<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version>…

  • shiro框架是什么_shiro+jwt

    shiro框架是什么_shiro+jwt1,什么是shiroApacheShiro是Java的一个安全框架。Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。2,为什么要学shiro1,既然shiro将安全认证相关的功能抽取出来组成一个框架,使用shiro就可以非常快速的完成…

  • GridData

    GridDataGridLayout//容器下面元素的列数,makeColumnsEqualWidth是否相同大小单元格publicGridLayout(intnumColumns,booleanmakeColumnsEqualWidth);GridData类可以与GridLayout类配合使用,其中构造函数有:[code="java"]publicGridData();…

  • java二维数组行列互换_java 二维数组行列互换[通俗易懂]

    java二维数组行列互换_java 二维数组行列互换[通俗易懂]代码需求:对等行等列的二维数组进行行列的互换分析过程主对角线是保持不变行列互换即角标互换:[0][1]=>[1][0]循环次数:外层循环行,内层循环每一行的列示意图代码实现publicclassArrayReverse{publicstaticvoidmain(String[]args){intarry[][]=newint[][]{{1,2,3},{4,5…

  • 华为服务器重装操作系统,华为服务器安装操作系统[通俗易懂]

    华为服务器重装操作系统,华为服务器安装操作系统[通俗易懂]《华为服务器安装操作系统》由会员分享,可在线阅读,更多相关《华为服务器安装操作系统(24页珍藏版)》请在人人文库网上搜索。1、华为服务器安装操作系统1.把网线接到服务器管理口上,2288服务器管理口在服务器背后中下部位置,有Mgmt的指示字样。5885服务器管理口在服务器背后右中部位置,有Mgmt的指示字样。2.另一端连接到电脑上,并配上ip地址,192.168.2.1段地址。3.在浏览器输入管理…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号