pyinstaller将资源文件夹与其附属文件打包成单个exe(编写spec方法)

简介

笔者因为课上有需要利用pyinstaller将.py文件代码和资源文件(图片,附属第三方库等)打包成单个exe可执行文件,查找了各大网站资料(三十个以上),发现只要其中一篇的源码写有可用方法,其内容被笔者整理下来供大家参考,如有不足或缺漏可指出,烦请谅解。

一.安装所需第三方库

pyinstaller

pip方式通过阿里云镜像站下载(因为默认清华源可能会有卡顿):

pip intsall pyinstaller -i https://mirrors.aliyun.com/pypi/simple/

二.调用终端进行打包

建议使用新的虚拟环境进行打包,具体方法看第五步的小细节备注

一般来说单个exe的打包方式为:

以下 test.py 文件为当前你所需要打包的代码的主文件入口

pyinstaller -F test.py

但是在此篇中选择的方式是spec文件进行打包:
建议将cmd终端cd到一个干净文件夹下进行打包,在此文件夹下放入要打包的.py文件和资源文件,如

在这里插入图片描述
pyecharts是我要打包的资源文件,pyecharts在当前使用的python目录下,可以直接进行搜索pyecharts找到后打开文件位置并复制到当前打包的文件夹,所以跟.py文件放为一起方便后续指定路径打包。
先生成spec文件:

pyinstaller -F test.py

然后这一步操作只要他的spec文件保留,dist和build等其他目录全部删掉,然后打开spec,进行下一步的编辑。

三.编写spec文件

举个例子,我要打包D盘下的test.py和他的附属资源文件夹pyecharts,下面的数据文件放入方法是整理了一位大牛博主qhjink的博客所见,感谢他的点子。

但是!!!值得一提的是
数据的书写格式要清晰
第一位路径和文件名标清楚,第二位是虚拟创建的文件夹的名称

added_files = [('D:/pyecharts', 'pyecharts' )]

比如你第一位的D:/pyecharts就是从环境中找到pip下来的pyecharts库的目录,第二位就是exe建成后运行生成一个虚拟目录的文件名,和第一位同名!!!

按照上面第三步的生成spec文件后,右键以文本方式打开进行编辑,可见到

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

added_files = [('D:/pyecharts', 'pyecharts' )]
#added_files是数据文件的位置,括号里的第一位要填入文件名和绝对路径,
#					第二位是被打包成exe后所用到的虚拟文件名名称(19物联网的同学直接复制之段吧,路径改一下其他的不动)。
a = Analysis(['test.py'],
             pathex=['D:\\'],
             binaries=[],#这里可以放入你的环境所依赖的一些库,如TensorFlow或pyecharts等
             datas=added_files,#这里改成上面的数据文件列表则可引入资源文件夹和文件
             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='test',#         打包后生成的文件名称(可自行修改)
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True, 
          icon = 'pkq.ico')
          #上面的icon参数一般要自己加,并不会帮你生成,也可调用终端命令进行ico打包

四.调用终端编译文件

打开终端cd进入指定打包路径进行spec文件方式打包:

pyinstaller -F test.spec

五.一些小细节

(1)利用第三方编辑器调用终端的时候,如果是用pycharm可以在terminal终端的方式打开,而且建议最好新建一个虚拟环境,可以选择anaconda3,因为一些老的环境在无意中会给你的打包文件多增加上那么几十Mb甚至一两百Mb的冗杂文件。

(2)利用cmd打开指定的环境或者虚拟环境,环境制作器为anaconda3的情况下,可使用win+R组合键打开cmd,放入conda.bat activate TF2.1(TF2.1为读者所创建的虚拟环境名称),则可进入该虚拟环境,要创建虚拟环境的的话,点这里喔

(3)如果要调用pyecharts库的代码文件打包时,发现运行不了,可将pyecharts手动从python目录下复制到当前打包所在的路径,如果缺少了pyecharts一起打包进exe,程序可能会出错。

(4)第四步骤中的代码中在最终形成的exe文件打开后会附带一个终端显示,如果想不让程序自己关掉,可在原来的.py文件引入os库结尾加上os.system("")即可,或者可以关闭它,打包时加入-Fw,使用方法为:

pyinstaller -Fw test.spec

如有疑问或质疑可在下方评论区交流,感谢查阅!!

  • 11
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值