python程序打包系列
接着上篇的pyinstaller的使用,在使用pyinstaller的过程中会生成一个spec文件,现在我们来聊聊这个文件。
文章目录
PyInstaller要做的第一件事是建立一个spec(规范)文件 myscript.spec。该文件存储在–specpath=目录中,默认情况下为当前目录。
规范文件告诉PyInstaller如何处理脚本。它对脚本名称和您提供给pyinstaller命令的大多数选项进行编码。spec文件实际上是可执行的Python代码。 PyInstaller通过执行spec文件的内容来构建应用程序。
对于PyInstaller的许多用途,您无需检查或修改规范文件。通常只需给命令提供所有必需的信息(例如隐藏的导入)作为选项pyinstaller并让其运行。
在四种情况下,修改规格文件很有用:
- 当您要将数据文件与应用程序捆绑在一起时。
- 当您想要包括运行时库(.dll或.so文件)时, PyInstaller不会从任何其他来源得知。
- 当您要将Python运行时选项添加到可执行文件时。
- 当您要创建具有合并的通用模块的多程序包时。
您可以使用以下命令创建规格文件:
pyi-makespec 选项 [其他脚本…]name.py
这些选项与上面为pyinstaller命令记录的选项相同。此命令创建文件,但不会继续生成可执行文件。name.spec
创建规范文件并根据需要对其进行修改后,可以通过将规范文件传递给pyinstaller命令来构建应用程序:
pyinstaller 选项 name.spec
创建规格文件时,大多数命令选项都编码在规格文件中。从规格文件构建时,这些选项无法更改。如果在命令行中给出它们,它们将被忽略,并由spec文件中的选项代替。
从规范文件构建时,只有以下命令行选项有效:
- –upx-dir=
- –distpath=
- –workpath=
- –noconfirm
- –ascii
- –clean
- –key=
我在打包的过程中用到的参数
以上参数:
–upx-dir=:要用到一个压缩程序UPX,用于压缩文件,需要单独下载。
–noconfirm:表示不再询问,会自动覆盖上次打包的内容
–key= :加密,需要安装tinyaes第三方库,最多16位字符
默认打包方式生成的spec文件内容大致如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None # 此处在使用--key= 会有变化
a = Analysis(['ai\\main.py'],
pathex=['C:\\Users\\Admin\\Downloads\\marsai-master'],
binaries=[],
datas=[],# 此处可以添加静态资源,例如你有个图片文件夹imgs,可以这样写[('imgs','imgs'),('test.txt','.')],打包以后会有一个一样的文件夹,点表示当前文件夹。
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='main', # 生成的exe的名字
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True, # 打包的时候进行压缩,False表示不压缩
console=True # 是否显示黑窗口,刚开始打包的时候一般都会有问题,建议设为True,解决所有问题后可以设置为False)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main' # 文件夹的名字)
最后,有任何关于打包的问题可以评论留言,大家一起交流学习。