目录
一、安装pyinstaller包
首先,通过Pycharm打开项目,设置好项目的解释器(运行环境)
然后通过Pycharm打开左下角的终端(通过pycharm打开的好处是它自动导航到项目的目录不用我们手动CD)
然后输入安装代码
pip install pyinstaller
等待完成安装即可。
二、生成.spec文件
执行代码
YourAppName替换成你的打包后APP的名字
your_script.py替换成你的主程序脚本(比如main.py)
pyinstaller --name YourAppName --onefile --windowed your_script.py
运行结束后它把你的环境全部打包了,打包好的exe文件在dist目录下
在你项目的目录会生成一个.spec的文件
文件里的详细参数注解如下:
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'], # 指定主脚本文件
pathex=[], # 额外搜索路径,通常留空
binaries=[], # 指定需要包含的二进制文件,通常留空
datas=[ # 指定要打包的数据文件及其目标路径
('datas/person1025.pt', 'datas'),
],
hiddenimports=[], # 列出需要隐藏导入的模块,通常留空
hookspath=[], # 自定义 hook 文件的路径,通常留空
hooksconfig={}, # 钩子配置,通常留空
runtime_hooks=[], # 运行时钩子,通常留空
excludes=[], # 列出不需要打包的模块,通常留空
noarchive=False, # 是否不创建存档文件,通常为 False
optimize=0, # 优化级别,0 为不优化
)
pyz = PYZ(a.pure) # 创建包含所有纯 Python 代码的压缩包
exe = EXE(
pyz, # 包含 PYZ 对象
a.scripts, # 包含的脚本
a.binaries, # 包含的二进制文件
a.datas, # 包含的数据文件
[], # 额外的 zip 文件,通常留空
name='DensePedestrianDetection', # 生成的可执行文件名称
icon = 'C:/Users/11131/Pictures/tubiao.ico', # 添加图标所在的路径
debug=False, # 是否启用调试模式,通常为 False
bootloader_ignore_signals=False, # 是否忽略启动器信号,通常为 False
strip=False, # 是否删除调试符号,通常为 False
upx=True, # 是否使用 UPX 压缩可执行文件,通常为 True
upx_exclude=[], # 排除 UPX 压缩的文件,通常留空
runtime_tmpdir=None, # 运行时临时目录,通常为 None
console=False, # 是否显示控制台窗口(Windows),通常为 False 用于 GUI 应用
disable_windowed_traceback=False, # 是否禁用窗口式回溯,通常为 False
argv_emulation=False, # 是否模拟 argv,通常为 False
target_arch=None, # 指定目标架构,通常为 None
codesign_identity=None, # 代码签名身份,通常为 None
entitlements_file=None, # 权限文件,通常为 None
)
可以根据这里面的参数自行调整一些
比如添加图标:更改icon的路径,找到你的ico文件,jpg\png转换ico格式可以用下面这个
三、添加自己的额外资源(UI、模型等)
你想在打包时添加额外的文件(例如模型、数据文件、UI图片等),可以修改生成的 .spec
文件。打开 .spec
文件并找到 datas
部分,添加需要的文件。
datas=[('path/to/your/model.pt', '你打包后的目录'),
('path/to/your/image.png', '你打包后的目录')]
前面是你资源的路径(可以用相对路径)
然后需要在项目中修改一下你原来的资源路径,以便打包后的程序能找到
如下图,在你原来的模型路径(其他资源也是)使用resource_path方法进行路径的变换
有些需要程序自主创建的目录,比如保存目录,使用相对路径保存在exe文件旁边就行,不用使用resource_path方法
def resource_path(relative_path):
"""获取资源的绝对路径,适用于打包后的应用程序和开发时环境"""
# 如果是打包后运行
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
# 如果是在开发环境下
return os.path.join(os.path.abspath("."), relative_path)
把我们所有的UI以及资源文件路径配置后就可以再次打包了
四、最后打包项目
执行如下代码(your_script替换成你的spec文件名)
pyinstaller your_script.spec
等待运行完成即可。
在dist目录就可以找到exe的文件,双击yuanshen启动!