Pylnstaller打包
Pylnstaller可以将py文件打包成单个exe文件,下面具体步骤
这个是我的例子:

一.安装
pip install pyinstaller
已有可以跳过
二.创建spec文件
打开该文件夹的cmd,然后输入:
pyi-makespec --onefile text.py
这时你的目录会生成一个这个文件
这个可以用vscode或者记事本打开。

这是里面内容:
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['text.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='text',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
这是里面每一行的作用:
a = Analysis(
['text.py'], # 主程序入口文件(必填)
pathex=[], # 模块搜索路径(如自定义库目录)
binaries=[], # 二进制依赖(如.dll/.so文件)
datas=[], # 非代码资源文件(图片/配置文件等)
hiddenimports=[], # 显式声明隐式依赖库(如动态导入的模块)
hookspath=[], # 自定义 Hook 脚本路径
hooksconfig={}, # Hook 配置参数(高级功能)
runtime_hooks=[], # 运行时 Hook(影响打包流程)
excludes=[], # 排除冗余库(减小体积)
noarchive=False, # 是否禁用归档(调试用)
optimize=0, # 代码优化级别(0=不优化)
)
exe = EXE(
pyz, # PYZ归档数据
a.scripts, # 主程序脚本(即Analysis中的入口)
a.binaries, # 二进制依赖(Analysis中定义)
a.datas, # 资源文件(Analysis中定义)
[], # 空列表(历史遗留参数)
name='text', # 输出文件名(不带后缀)
debug=False, # 是否包含调试信息
bootloader_ignore_signals=False, # 是否忽略系统信号(如Ctrl+C)
strip=False, # 是否剥离符号(减小体积,Linux专用)
upx=True, # 是否用UPX压缩(需安装UPX工具)
upx_exclude=[], # 排除UPX压缩的文件(如损坏的DLL)
runtime_tmpdir=None, # 资源解压临时目录(默认系统临时路径)
console=True, # 是否显示控制台窗口(GUI程序设为False)
disable_windowed_traceback=False, # 禁用GUI错误弹窗
argv_emulation=False, # macOS专用(模拟命令行参数)
target_arch=None, # 目标架构(如'x86_64')
codesign_identity=None, # macOS代码签名标识
entitlements_file=None, # macOS权限配置文件
)
很复杂是不是,不过这是个简单的例子,不需要调试那么多东西。
3.修改spec的配置:
如果你的py文件没有引用资源,你可以只调整这个
console=True,
如果你不想你打包好的程序出现cmd,那就改成False,如果想就不用管,直接跳到第四步
像我这个例子,我的py文件引用了资源,所以我打包的时候要加载资源,这时要修改datas里的内容
下面是个例子:
# 将本地 assets 文件夹下所有 .png 文件打包到 exe 的 assets 目录中
datas = [('assets/*.png', 'assets')]
# 将 config.json 文件直接放到 exe 根目录
datas = [('src/config.json', '.')]
# 递归打包 fonts 目录下的所有文件(包括子目录)
datas = [('fonts/**/*', 'fonts')]
根据我的实际情况,我的修改为:
datas=[
('font/*', 'font'),
('pic/*','pic'),
('sound/*','sound'),
],
保存
4.打包
直接在命令行中输入:
pyinstaller text.spec
这时,我们的文件夹变成这样

我们要的exe文件就在dist文件夹里,build没有什么用,可以删除
完成,可以正常打开使用

本文来自博客园,作者:漫宿骄盛,转载请注明原文链接:https://www.cnblogs.com/msjs/p/18801775
都是顺手发的,写的时候可能有错误,如果发现了,望各位指出。

浙公网安备 33010602011771号