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

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

### 编辑 SPEC 文件以使用 PyInstaller 打包 Python 程序 为了将 Python 应用程序打包可执行文件PyInstaller 提供了一种通过编辑 `.spec` 文件来定制构建过程的方法。`.spec` 文件是一个 Python 脚本,定义了应用程序的结构以及如何将其转换为独立的可执行文件。 #### 创建初始 SPEC 文件 运行 `pyinstaller` 命令并指定要打包的脚本名称时,默认会创建一个对应的 `.spec` 文件: ```bash pyinstaller your_script.py ``` 这将在当前目录下生名为 `your_script.spec` 的文件[^1]。 #### 修改 SPEC 文件 打开生的 `.spec` 文件可以发现其主要部分如下所示: - **Analysis**: 定义哪些模块和二进制文件应该被包含在最终的应用程序中。 - **EXE**: 描述如何创建 Windows 可执行文件。 - **COLLECT**: 收集所有必要的数据文件和其他资源。 ##### 添加额外的数据文件 如果希望向项目中添加其他静态文件(如配置文件、图片等),可以在 `a.datas` 列表里加入这些路径: ```python from pathlib import Path # 获取当前工作目录下的 'data' 文件夹内所有文件 datas = [(str(f), str(Path('data') / f.name)) for f in Path('./data').iterdir()] ... a = Analysis(['your_script.py'], pathex=[], binaries=[], datas=datas, # 将自定义文件列表传递给 datas 参数 ...) ``` ##### 自定义图标 更改生 EXE 文件使用的图标可以通过修改 `EXE()` 函数中的参数实现: ```python exe = EXE(pyz, a.scripts, [], exclude_binaries=True, name='YourApp', debug=False, strip=False, upx=True, console=True, icon='path/to/your/icon.ico', # 设置应用图标的路径 ) ``` ##### 使用 TOC 和 Tree 类处理复杂情况 对于更复杂的场景,比如需要动态加载某些库或特定版本依赖项的情况,则可能需要用到 `TOC` 或者 `Tree` 类来进行更加精细控制。 例如,当有多个子目录需要递归复制到目标环境中时,可以用 `Tree` 来简化操作: ```python import os.path as osp tree = Tree(osp.join(here, "resources"), prefix="resources", excludes=["*.DS_Store"]) coll = COLLECT(exe, tree, ...) ``` 以上就是关于如何利用 PyInstaller 中的 `.spec` 文件来自定义打包流程的一些基本指导。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值