项目场景:
Python版本:3.8
因公司业务需求,须开发一套局域网内视频会议软件,此次采用Python实现此功能。
程序编写完并在编译器实现此功能后,采用pyinstaller组件打包成应用程序
问题描述:
在使用pyinstaller组件打包过程中,着实遇到一些问题,以下列出此次遇到主要的问题:
1.如何打包多个文件?
2.打包完运行后控制台显示"找不到指定模块。mkl_intel_thread.l.dll",图示如下:
3.打包如何排除不需要的组件以减少包的大小?
4.待补充 (≧◠◡◠≦)✌
原因分析:
本次打包组件均由conda install安装,在编译器中opencv引用模块运行项目是没问题的,只是打包运行就会报Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.l.dll,缺少MKL文件 ,疑惑了一段时间…( @_@; )
解决方案:
首先呢,当然是找百度大神来解决问题啦 (๑•̀ㅂ•́)و✧,寻寻觅觅,无果,但至少让我理解了一点打包的过程和注意事项,结合过去代码经验,这次把Anaconda的opencv、numpy和mkl模块都给卸了,代码如下:
conda uninstall opencv
conda uninstall numpy
conda uninstall mkl
然后改成如下:
pip install mkl
pip install numpy
pip install opencv
以上最好按顺序安装,三个组件有相互依赖关系,安装完发现部署后不再报错。
在安装过程中也发现了两个安装方式安装的组件其实不太相同,从包的大小得知,pip install安装的包应该是比较完整的,所以pyinstaller打包起来不会导致文件丢失。
这里就解决了问题2啦(把最难的先给解决啦~ (  ̄ー ̄)人(^▽^ ))
接下来说明一下如何打包多文件。
首先要打包多文件,先生成一个spec文件,代码如下:
pyi-makespec app.py
这行代码会生成一个app.spec文件在当前目录下。
生成的app.spec的内容如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
#如果要添加打包文件,在这里添加
a = Analysis(['app.py'], #例:['app.py','app1.py','app2.py']
pathex=['C:\\yourAppDir'], #打包路径,一般默认为当前文件夹路径
binaries=[],
# 打包静态资源,这边为元祖类型
datas=[], # 例:[('C\\yourAppDir\\images','images'),('C\\yourAppDir\\videos','videos')]
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
#生成的执行文件名
name='MyAwesomeApp', #生成 MyAwesomeApp.exe
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
#运行时是否显示控制台,注意True和False的首字母都要大写
console=True)
以下为打包常用命令:
常用:
-i 给应用程序添加图标
-F指定打包后只生成一个exe格式的文件
-D–onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c–console, –nowindowed 使用控制台, * 面(默认)
-w–windowed, –noconsole 使用窗口,无控制台
-p 添加搜索路径
这边我用的是:
pyinstaller -F app.spec
过了一会儿打包完成后会在当前目录生成三个文件夹,如下图所示:
_pycache_文件夹缓存你打包的文件。(如果组件有重新安装,打包时建议删了再进行打包)
bulid文件夹保存一些关于打包文件的信息。
dist文件保存打包完生成的.exe文件。
以上,问题1结束啦,接下来最后一个问题3咯~ ( ̄▽ ̄)~■干杯□~( ̄▽ ̄)
记得第一次打包的时候,很纳闷,为啥写一点代码打包起来要100多MB? ㄟ( ▔, ▔ )ㄏ
首先依然百度一下,你就…还是不知道 (ˉ▽ ̄~) 切~~
还是靠自己啦,最后打开编译器看一下环境,陡然发现环境多了很多不需要的组件。
如果怕麻烦一个一个conda uninstall的话,建议新建一个干净的python3环境,再安装自己需要的组件。
(当前Python环境建议新建一个在项目当前目录下,为当前项目专用环境,初始化只有两个基本组件,再安装requirement.txt文件中的组件就可以了)
这样打包起来你就会发现包小了很多。
终于写完啦 o(*≧▽≦)ツ┏━┓ 开熏
锦瑟无端五十弦,一弦一柱思华年
来源:https://blog.csdn.net/qq_21609191/article/details/119420857
猜你喜欢
- 本文实例分析了PHP中怎样防止SQL注入。分享给大家供大家参考。具体分析如下:一、问题描述:如果用户输入的数据在未经处理的情况下插入到一条S
- 一、读写文件在 Python 中,我们可以使用 open() 函数打开文件,with 语句可以自动关闭文件。读取文件内容:with open
- 一、正则1.正则表达式定义正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一
- 继上篇Vue 滚动触底 mixins,将对于文档滚动触底的逻辑迁移到某个dom上,将会用到 Vue.directive 来实现代码逻辑复用。
- 前言:谈到Update 语句大家可能不会陌生,很多情况下我们都会使用它来更新table中的记录。一般而言我们会使用innodb 的存储引擎,
- 首先将一个字典转化为DataFrame,然后以DataFrame中的列进行频次统计。代码如下:import pandas as pda={&
- 1.首先分析要做的项目的结构,整理出关系图2.运行 python manage.py startapp XXX 创建一个app3.根据关系图
- 目录1、准备基础数据2、一次性展示数据3、引入分页器附:drf分页器的使用1.1 PageNumberPagination1.2 Limit
- 1、PIL介绍以及图片分割Python 3 安装: pip3 install Pillow1.1 image 模块Image模块
- 本文实例讲述了Python实现简单的文本相似度分析操作。分享给大家供大家参考,具体如下:学习目标:1.利用gensim包分析文档相似度2.使
- 学Python之前我们先来几个简单的小游戏练练手,这三个小游戏一个比一个复杂,建议新手慢慢来:1.猜拳import random  
- async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案。目前,async / await这个特性已经是sta
- 这是个郁闷的问题。主级获得ID列表 select ID from FS_SD_Address where PID=0
- commands模块的适用commands模块是python的内置模块,他共有三个函数,使用help(commands)可以查看到FUNCT
- 在附加数据库后查看不了数据库关系图,也无法建立数据库关系图 我的解决方法如下: 1、设置兼容级别为90(2005为90)(2000为80)
- 一、报错error connecting to master 'x@x.x.x.x:x' - retry-time: 60&
- 客户的一台服务器出现Raid故障,经过我们的努力,数据基本恢复成功,但是其中的一个SQL Server日志文件(扩展名LDF)损坏严重,基本
- Conditional-CSS允许你针对单一浏览器或浏览器组写出有逻辑条件的可维护的特定的CSS声明。使CSS针对特定的浏览器。简化你对CS
- sql语句/*MySQL 消除重复行的一些方法---Chu Minfei---2010-08-12 22:49:44.660--引用转载请注
- 本文实例讲述了Python基础学习之基本数据结构。分享给大家供大家参考,具体如下:前言相比于PHP,Python同样也是脚本解析语言,所以在