我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

项目场景:

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(*≧▽≦)ツ┏━┓ 开熏

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

在这里插入图片描述

到此这篇关于python之pyinstaller组件打包命令和异常解析实战的文章就介绍到这了,更多相关python pyinstaller内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录