将一个python项目只打包一个可执行文件(*.exe)
本次需求是将一个
python项目只打包一个exe(发送给用户时无需提供依赖文件),其内部已经包含了依赖的python文件和外部的文件如txt以及环境,本例具体应用是将深度学习模型打包,外部文件为pth格式。
项目的目录文件如下:
main.py为主函数model.py为网络结构.pth是训练好的网络权重:

代码如下,权重文件(外部文件)使用自动获取根目录+相对目录引入:
# 主文件,这里是为main.py
import os
uipath, uiname = os.path.split(os.path.realpath(__file__))
pth_path = os.path.join(uipath, 'net.pth') # 外部文件的绝对路径
my_model = model()
if torch.cuda.is_available():
my_model.cuda()
my_model.load_state_dict(torch.load(pth_path))
else:
my_model.load_state_dict(torch.load(pth_path, map_location='cpu'))
在主函数目录下输入打包命令:
pyinstaller -F --add-data "[PATH];." main.py
参数说明:
-F生成结果是一个exe文件,所有的第三方依赖、资源和代码均被打包进该exe内--add-data为外部文件或者目录的绝对路径,Windows中路径需要后面加上;.[PATH]为项目路径main.py为主函数入口
补充
最近遇到打包exe的时候依赖很多数据文件,均在为一个目录(里面很多txt,png等文件)的情况,这种情况操作如下:
- 使用
pyinstaller -F main.py生成spec和dist和bulid - 编辑spec文件中的datas = [(‘依赖目录绝对路径如D:\data’, ‘data’)], 括号中的第二项为该exe文件解压后存放的目录,我这里代码的数据文件在data下,因此填写data,假如是二级子目录则填写相应的目录名字即可。
- pyinstaller main.spec, 这里无需加-F,有的版本加了-F会报错,该命令会重新生成包含外部依赖的exe文件
- pyinstaller在mac系统中打包的可执行文件为unix类型(exec文件),传给别的mac之后会自动变成文档类型,这时,
chmod +x main, 恢复文件的可执行之后双击就可以运行了
本文介绍如何使用PyInstaller将Python项目及其深度学习模型(包括.pth权重文件)打包成一个exe可执行文件,确保用户无需额外提供依赖,适用于跨平台部署。包括处理外部文件夹和调整打包参数的详细步骤。
 本次需求是将一个python项目只打包一个exe(发送给用户时无需提供依赖文件),其内部已经包含了依赖的pytho&spm=1001.2101.3001.5002&articleId=117623668&d=1&t=3&u=443c898b1afd4c2498dc6b0f06b3bb4d)
2562

被折叠的 条评论
为什么被折叠?



