python之pyinstaller组件打包命令和异常解析实战

作者:愛彈吉他的小盆友 时间:2023-08-05 05:34:23 

项目场景:

Python版本:3.8

因公司业务需求,须开发一套局域网内视频会议软件,此次采用Python实现此功能。
程序编写完并在编译器实现此功能后,采用pyinstaller组件打包成应用程序

问题描述:

在使用pyinstaller组件打包过程中,着实遇到一些问题,以下列出此次遇到主要的问题:

1.如何打包多个文件?

2.打包完运行后控制台显示"找不到指定模块。mkl_intel_thread.l.dll",图示如下:

python之pyinstaller组件打包命令和异常解析实战

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

过了一会儿打包完成后会在当前目录生成三个文件夹,如下图所示:

python之pyinstaller组件打包命令和异常解析实战

_pycache_文件夹缓存你打包的文件。(如果组件有重新安装,打包时建议删了再进行打包)

bulid文件夹保存一些关于打包文件的信息。

dist文件保存打包完生成的.exe文件。

以上,问题1结束啦,接下来最后一个问题3咯~ ( ̄▽ ̄)~■干杯□~( ̄▽ ̄)

记得第一次打包的时候,很纳闷,为啥写一点代码打包起来要100多MB? ㄟ( ▔, ▔ )ㄏ

首先依然百度一下,你就…还是不知道 (ˉ▽ ̄~) 切~~

还是靠自己啦,最后打开编译器看一下环境,陡然发现环境多了很多不需要的组件。

如果怕麻烦一个一个conda uninstall的话,建议新建一个干净的python3环境,再安装自己需要的组件。

(当前Python环境建议新建一个在项目当前目录下,为当前项目专用环境,初始化只有两个基本组件,再安装requirement.txt文件中的组件就可以了)

这样打包起来你就会发现包小了很多。

终于写完啦 o(*≧▽≦)ツ┏━┓ 开熏

锦瑟无端五十弦,一弦一柱思华年

python之pyinstaller组件打包命令和异常解析实战

来源:https://blog.csdn.net/qq_21609191/article/details/119420857

标签:python,pyinstaller,组件打包命令,异常解析
0
投稿

猜你喜欢

  • mysql闪回工具binlog2sql安装配置教程详解

    2024-01-27 14:12:11
  • MySQL索引用法实例分析

    2024-01-22 16:42:22
  • python getopt 参数处理小示例

    2021-03-02 13:05:02
  • 在asp中通过vbs类实现rsa加密与解密

    2010-05-27 12:18:00
  • 浅析Python是如何实现集合的

    2022-05-16 03:38:58
  • 今天 平安夜 Python 送你一顶圣诞帽 @微信官方

    2021-12-10 14:24:14
  • 四大因素扼杀了中国人的创造力

    2008-09-11 18:05:00
  • MySQL数据库开发的36条原则(小结)

    2024-01-23 23:34:48
  • Pytorch GPU显存充足却显示out of memory的解决方式

    2022-05-20 18:56:58
  • Mootools常用方法扩展(三)

    2009-01-14 20:07:00
  • Python使用sorted排序的方法小结

    2022-09-03 21:11:23
  • python简单区块链模拟详解

    2023-11-09 12:04:57
  • Python中logging日志库实例详解

    2023-10-04 13:26:25
  • Oracle静态注册与动态注册详解

    2024-01-19 22:31:31
  • Jquery多选下拉列表插件jquery multiselect功能介绍及使用

    2024-04-22 12:59:41
  •  python中字符串的常见操作总结(二)

    2023-04-08 17:17:35
  • js实现随屏幕滚动的带缓冲效果的右下角广告代码

    2024-06-07 15:26:48
  • MySQL 开窗函数

    2024-01-15 11:06:24
  • PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    2023-11-24 06:26:11
  • python使用smtplib模块发送邮件

    2023-05-16 22:25:38
  • asp之家 网络编程 m.aspxhome.com