@python打包exe(包含外部文件,迁移到其他电脑只需要发送exe) 本次需求是将一个python项目只打包一个exe(发送给用户时无需提供依赖文件),其内部已经包含了依赖的pytho

将一个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等文件)的情况,这种情况操作如下:

  1. 使用pyinstaller -F main.py生成spec和dist和bulid
  2. 编辑spec文件中的datas = [(‘依赖目录绝对路径如D:\data’, ‘data’)], 括号中的第二项为该exe文件解压后存放的目录,我这里代码的数据文件在data下,因此填写data,假如是二级子目录则填写相应的目录名字即可。
  3. pyinstaller main.spec, 这里无需加-F,有的版本加了-F会报错,该命令会重新生成包含外部依赖的exe文件
  4. pyinstaller在mac系统中打包的可执行文件为unix类型(exec文件),传给别的mac之后会自动变成文档类型,这时,chmod +x main, 恢复文件的可执行之后双击就可以运行了
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值