Pyinstaller 使用Spec文件来把非代码文件一起打包

观看前可先食用另一篇文章
https://blog.csdn.net/m0_43406494/article/details/112697296
提供一个spec文件样例

# -*- mode: python ; coding: GBK -*-

block_cipher = None


a = Analysis(['test2.py'],
             pathex=['C:\\Users\\tumbled\\Desktop'],
             binaries=[],
             datas=[(r"C:\Users\tumbled\Downloads\周柏豪 - 够钟.mp3","music")],
             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,
          [],
          exclude_binaries=True,
          name='test2',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False , icon='test2.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='test2')

在这里插入图片描述

使用pyinstaller命令时,先生成一个spec文件,存放在specpath路径下,默认为当前路径
Spec文件告诉pyinstaller如何生成可执行文件
实际上spec文件里面的内容就是python代码
使用了三个函数,Analysis、PYZ、EXE
很多情况下并不需要修改spec文件,直接在命令行上面提供参数给pyinstaller即可满足使用
在这里插入图片描述

有如下四种情况需要修改spec文件
在这里插入图片描述

把数据文件跟app一起打包
把动态连接库一起打包
添加运行时选项
想要生成多个可执行程序,公共的模块分割出来给其他调用
在这里插入图片描述

使用pyi-makespec命令来只生成spec文件,而不接着去生成可执行文件
用法跟pyinstaller一样

在这里插入图片描述

有了spec文件之后,可以使用pyinstaller命令来由spec文件生成可执行文件,因为生成spec文件时给命令行的参数都编码进spec文件里面了,这个时候再在命令行使用一些参数会被直接无视!而只考虑spec文件里面的参数
这个时候,只要下面一些参数会有效果(不过好像用处都不大。。。)
在这里插入图片描述

The following is a shortened example of a spec file for a minimal, one-folder app:
在这里插入图片描述
在这里插入图片描述

使用了one-file参数(F参数)时没有COLLECT函数的调用,EXE对象接收了所有的脚本、模块和二进制文件

在这里插入图片描述

Analysis类返回的对象有成员如下,scripts成员为py脚本的文件名,pure成员为纯粹的python模块(即导入库,binary成员包含add-binary参数的值,datas参数包含add-data参数的值
PYZ对象包含a.pure里面所有的模块
EXE对象由被分析的脚本和PYZ文件生成
COLLECT对象由所有其他部分生成输出文件夹

可以修改spec文件里面Analysis和EXE的参数
在这里插入图片描述

在这里插入图片描述

打包成one-folder时,文件和执行文件放在同一个文件夹下,打包成one-file时,文件打包进可执行文件里,运行时会解压出来
在这里插入图片描述

使用–add-data参数来添加文件,或者修改spec文件,传参给Analysis函数的datas参数,datas参数接收一个列表,列表成员是一个二元组,第一个值是被包含的文件在系统中的路径,第二个值是运行时文件所在的位置(因为one-file模式下会解压出来)

在这里插入图片描述

使用add-data参数的方式
在这里插入图片描述

在这里插入图片描述

可以使用通配符 *

在这里插入图片描述

直接使用*来包含文件夹下面所有的文件
运行时,/mygame/data的内容会放在data文件夹下面

如下例

from subprocess import Popen
import time
Popen(r'music\周柏豪 - 够钟.mp3', shell=True)
time.sleep(10)

代码中使用上面的路径
Spec文件修改如下
Datas参数传入mp3文件的系统路径和运行时存放的路径
另外因为使用了中文,而且spec文件也是python代码,因此修改首行为coding: GBK

在这里插入图片描述

one-folder打包生成时,test2文件夹下面多了个music文件夹,存放了文件内容
在这里插入图片描述

在这里插入图片描述

动态连接库这些文件才是用add-binary参数(pyinstaller需要递归查找二进制依赖的),其他图像、文本文件都是使用add-data
在这里插入图片描述

类似于前面的用法,传给binaries参数
使用场合如下
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值