最近有个Python小项目要打个包,项目结构比较简单

  • main.py(主文件),
  • 以及model_050.hdf5 (在云端训练好的AI模型)

主函数里引用了一些包,如下

需要解决的问题:

  1. 将main.py和model_050.hdf5打包到一个exe文件中,这样模型不会容易被别人拷贝走
  2. 将这些依赖包cv2, PyQt5, tensorflow也全部打包进这个exe文件,这样脱离环境也能直接运行

Step1:

参考了文章:

这篇文章真是一盏明灯,没有走一步多余的弯路

Pyinstaller如何打包多个资源文件(超详细教程)

文章中的这个要替换一下,文章是用的中文引号,通过不了。换成下面的就ok
datas=[('res','.')],

亲测可行:下面是我的项目结构

一通操作之后获得了main.exe

满怀欣喜的一运行,报错啦

ImportError: OpenCV loader: missing configuration file: [‘config.py‘].

也是正常,这么多年经验告诉我,一般都不可能一次性过的

Step2:

国外网站一通搜,没搞定啊,后来找到一个中国小哥的文章,搞定了

因为文章中有下面一句话,我知道了他已经踩过了同样的坑

查阅了往上的方法大部分都说升级 pyinstaller 和 opencv 就可以解决:

可是我的库都是最新版本的,根本没得升级。找了很久终于找到了一个成功的解决方法:

ImportError: OpenCV loader: missing configuration file: [‘config.py‘]. 报错解决

关键获取cv2的地址:

文件中建议用下面这条命令生成exe,

pyinstaller main.py -F --paths="D:\ProgramData\Anaconda3\lib\site-packages\cv2"

可是我之前用的方式是生成了main.spec配置文件的方式啊,上面的命令感觉不适合我

机智如我,那我到main.spec里看看呗

找到了pathex, 一看就是配置额外扫描地址的

果断把cv2的位置放了进去

pyinstaller main.spec重新生成exe。

嘿嘿~~ 工作了!

Step3:

打包成一个一键安装的程序,第一感觉就想到了Wix,然后找到了两篇文章

把Python代码打包成电脑软件和手机App

[Wix] 安装部署——起步

想着程序是用pyinstaller打包成exe的要么还是用第一篇文章中描述的方式先试试

稍微试了一下,后来发现文章中要下载Git,然后例子是打包的.py文件,和我生成的exe有点区别

果断放弃,有点费时。

那么开始使用第二种方式,因为刚好visual studio 2017本来我就有装

创建了一个setup project for wix v3

打开上面的Product.wxs 配置了安装目录,以及exe引用地址,还有需要的桌面快捷方式

build之后,生成了msi安装包和一个.cab文件

双击.cab文件之后发现,原来之前的exe藏在这里面了

双击msi一键安装之后,发现3件套全了,桌面快捷方式,程序位置,以及windows安装程序列表

Step4:

深吸一口气, 双击AIDetect快捷方式,在万籁俱静中等待程序运行,成功!!!

可谓是:踏破铁鞋无觅处 得来全不费功夫~~ (为什么会突然想到这句,奇怪了...... 好像和主题无关嘛)

Python AI小项目打包通关:Pyinstaller和Wix都用上了的更多相关文章

  1. 记一次python + selenium小项目出现的问题与解决办法

    记一次python + selenium小项目出现的问题与解决办法 如何接入代理 def crawl_xdaili(self):#代理 可不用 需要时 解除注释 """ ...

  2. 学习笔记之Python人机交互小项目一:名字管理系统

    2020是一个不平凡的一年,但即使挫折不断,我们每学期的课程实训也没有受到影响,仍旧如期实施.与往年不同的是,今年的实训老师是学校邀请的公司在职人员来给我们实训.今年实训的内容是Python语言,下面 ...

  3. 学习笔记之Python人机交互小项目二:名片管理系统

    继上次利用列表相关知识做了简单的人机交互的小项目名字管理系统后,当学习到字典时,老师又让我们结合列表和字典的知识,结合一起做一个名片管理系统,这里分享给在学习Python的伙伴! 1.不使用函数 1 ...

  4. python flask 小项目

    0 开始之前 网上看了很多教程,都不是很满意,因此自己写一个大型教程,从入门到做出一个比较完整的博客.此次教程不是直接把整个博客直接代码整理出来然后运行一遍就完事,我会从flask的各个模块讲起.所以 ...

  5. 找python爬虫小项目?github给你准备好了!

    前言 即使我们都是程序员,但我们也并非都会修电脑,都会做酷炫的ppt,都会优化系统卡顿.其实程序员也是分行业.分专业的,就像医生也分内外科.呼吸科.神经科神的. 作为非专业的python选手,或者非专 ...

  6. python爬虫小项目实战

  7. Spring Boot:项目打包成war并发布到Tomcat上运行

    一.修改pom文件 1. 因为SpringBoot中嵌入的有Tomcat,因此要移除嵌入式的Tomcat插件 <dependency> <groupId>org.springf ...

  8. vue+webpack项目打包后背景图片加载不出来问题解决

    在做VUE +的WebPack脚手架项目打包完成后,在IIS服务器上运行发现项目中的背景图片加载不出来检查项目代码发现是因为CSS文件中,背景图片引用的路径问题;后来通过修改配置文件,问题终于解决了, ...

  9. 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)

    解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片) 1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件 ...

  10. 把Python项目打包成exe文件

    我们很多时候,写好的程序需要打包成.exe文件才可以发给客户,那么今天我就来谈一谈,如何将一个写好的Python程序打包成exe文件! 首先,我们我们使用到的工具是python 3.7 和 Pyins ...

随机推荐

  1. Springboot 之 Filter 实现 Gzip 压缩超大 json 对象

    简介 在项目中,存在传递超大 json 数据的场景.直接传输超大 json 数据的话,有以下两个弊端 占用网络带宽,而有些云产品就是按照带宽来计费的,间接浪费了钱 传输数据大导致网络传输耗时较长 为了 ...

  2. SQL基础语句入门

    SQL语句入门 起因 学校开设数据库相关的课程了,打算总结一篇关于基础SQL语句的文章. SQL介绍 SQL最早版本是由IBM开发的,一直发展到至今. SQL语言有如下几个部分: 数据定义语言DDL: ...

  3. Oracle安装和卸载

    Oracle安装: 1. 检查是否安装net framework 3.5 2. 安装win64_11gR2_database服务端 更改安装目录,设置密码 2. 检查服务 services.msc,两 ...

  4. phoenix操作HBase

    phoenix操作HBase 一.Phoenix简介 Phoenix,由saleforce.com 开源的一个项目,后又捐给了Apache. 它相当于一个Java 中间件,帮助开发者,像使用jdbc ...

  5. Docker | 自定义网络(网关、子网地址)

    了解 docker network 通过下面的命令来获取帮助 docker network --help Commands: connect Connect a container to a netw ...

  6. java.lang.ClassNotFoundException: Cannot find class: “com.mysql.jdbc.Driver“的报错问题

    @Testpublic void testConnectionTest5() throws Exception { //1.读取配置文件,获取4个基本信息 InputStream is = Conne ...

  7. 记录一次成功反混淆脱壳及抓包激活app全过程

    记录一次成功反混淆脱壳及抓包激活app全过程 前言 ​ 近期接到一个需求,要对公司之前开发的一款app进行脱壳.因为该app是两年前开发的,源代码文件已经丢失,只有加壳后的apk文件,近期要查看其中一 ...

  8. 基于BP神经网络的手MNIST写数字识别

    import numpy import math import scipy.special#特殊函数模块 import matplotlib.pyplot as plt #创建神经网络类,以便于实例化 ...

  9. Eclipse插件RCP桌面应用开发的点点滴滴

    Eclipse插件开发的点点滴滴 新公司做的是桌面应用程序, 与之前一直在做的web页面 ,相差甚大 . 这篇文章是写于2022年10月底,这时在新公司已经入职了快三月.写作目的是:国内对于eclip ...

  10. 并发编程之 ThreadLocal

    前言 了解过 SimpleDateFormat 时间工具类的朋友都知道,该工具类非常好用,可以利用该类可以将日期转换成文本,或者将文本转换成日期,时间戳同样也可以. 以下代码,我们采用通用的 Simp ...