打包导入pyzbar的脚本时的注意事项

目录

  • 前言
  • 问题
    • 问题的出现
    • 解决
  • 总结


本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser

前言

上次用python写了个二维码扫描器(哈哈顺便推销一下:制作二维码扫描器),核心功能使用了pyzbar来实现,用于扫描二维码。但是很不幸,在打包的时候出现了一些状况。

问题

问题的出现

正常来说,如果我们要用pyinstaller以单文件模式打包一个文件,那么肯定是运行pyinstaller -F --hidden-import <module1> --hidden-import <module2> -i <icon> 之类的命令。这回也不例外,我运行了:

pyinstaller -F -w --hidden-import PIL --hidden-import tkinter --hidden-import pyperclip --hidden-import pyzbar -i icon.ico --add-data=icon_clear.ico:. QRCodeReader.py

可是当我双击运行打包好的exe时,却弹出了错误提示:

Traceback (most recent call last):File "PyInstaller\loader\pyimod03_ctypes.py", line 53, in __init__File "ctypes\__init__.py", line 374, in __init__
FileNotFoundError: Could not find module 'libiconv.dll' (or one of its dependencies). Try using the full path with constructor syntax.The above exception was the direct cause of the following exception:Traceback (most recent call last):File "pyzbar\zbar_library.py", line 58, in loadFile "pyzbar\zbar_library.py", line 50, in load_objectsFile "pyzbar\zbar_library.py", line 51, in <listcomp>File "ctypes\__init__.py", line 452, in LoadLibraryFile "PyInstaller\loader\pyimod03_ctypes.py", line 55, in __init__
pyimod03_ctypes.install.<locals>.PyInstallerImportError: Failed to load dynlib/dll 'libiconv.dll'. Most likely this dynlib/dll was not found when the application was frozen.During handling of the above exception, another exception occurred:Traceback (most recent call last):File "PyInstaller\loader\pyimod03_ctypes.py", line 53, in __init__File "ctypes\__init__.py", line 374, in __init__
FileNotFoundError: Could not find module 'C:\Users\Lenovo\AppData\Local\Temp\_MEI204842\pyzbar\libiconv.dll' (or one of its dependencies). Try using the full path with constructor syntax.The above exception was the direct cause of the following exception:Traceback (most recent call last):File "QRCodeReader.py", line 7, in <module>File "<frozen importlib._bootstrap>", line 1007, in _find_and_loadFile "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 680, in _load_unlockedFile "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_moduleFile "pyzbar\pyzbar.py", line 7, in <module>File "<frozen importlib._bootstrap>", line 1007, in _find_and_loadFile "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 680, in _load_unlockedFile "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_moduleFile "pyzbar\wrapper.py", line 151, in <module>File "pyzbar\wrapper.py", line 148, in zbar_functionFile "pyzbar\wrapper.py", line 127, in load_libzbarFile "pyzbar\zbar_library.py", line 60, in loadFile "pyzbar\zbar_library.py", line 50, in load_objectsFile "pyzbar\zbar_library.py", line 51, in <listcomp>File "ctypes\__init__.py", line 452, in LoadLibraryFile "PyInstaller\loader\pyimod03_ctypes.py", line 55, in __init__
pyimod03_ctypes.install.<locals>.PyInstallerImportError: Failed to load dynlib/dll 'C:\\Users\\Lenovo\\AppData\\Local\\Temp\\_MEI204842\\pyzbar\\libiconv.dll'. Most likely this dynlib/dll was not found when the application was frozen.
[3252] Failed to execute script 'QRCodeReader' due to unhandled exception!

大概意思是无法加载pyzbar/libiconv.dll。什么叫无法加载?我用pyinstxtract.py将刚才打包好的exe拆了开来,结果发现里面根本就没有pyzbar这个文件夹,更别提libiconv.dll了。

此时我脑残似的从网上随便找了一个libiconv.dll下载,然后打包进去。可依然没用。

解决

再仔细观察抛出的异常,里面有这么一句话:

Could not find module ‘libiconv.dll’ (or one of its dependencies).

这下懂了:无法加载libiconv.dll可能是因为没有libiconv.dll,也可能是因为缺少libiconv.dll的依赖项而导致的

此时终于恍然大悟:既然libiconv.dll并没有缺失(刚才不是打包进去了嘛),那很可能是因为缺少依赖导致。终于,我在C:\Users\Lenovo\AppData\Local\Programs\Python\Python39\Lib\site-packages\pyzbar下找到了另外一个dll文件:libzbar-64.dll。将这个dll文件也打包进去,终于没问题了!

所以,最终那个程序的打包命令是:

pyinstaller -F -w --hidden-import PIL --hidden-import tkinter --hidden-import pyperclip --hidden-import pyzbar -i icon.ico --add-data=icon_clear.ico:. --add-data=libiconv.dll:./pyzbar/ --add-data=libzbar-64.dll:./pyzbar/ QRCodeReader.py

大家也可以参考一下。

总结

所以如果想用pyinstaller打包和pyzbar有关的脚本,请提前将C:\Users\Lenovo\AppData\Local\Programs\Python\Python39\Lib\site-packages\pyzbar文件夹下的libiconv.dlllibzbar-64.dll复制到工作目录下,并在打包命令中添加--add-data=libzbar-64.dll:./pyzbar/ --add-data=libiconv.dll:./pyzbar/两个参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/42654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能扫地机器人的清扫原理是什么

智能扫地机器人的清扫原理主要基于先进的传感器技术、高效的吸尘系统以及智能的路径规划与导航算法。以下是对其清扫原理的详细阐述&#xff1a; 一、环境识别与避障 传感器技术&#xff1a;智能扫地机器人通过搭载的红外线传感器、超声波传感器、激光雷达、摄像头等多种高精度…

用vue2+elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选

单选注意点&#xff1a; touchmove.prevent: 在 touchmove 事件上添加 .prevent 修饰符&#xff0c;以阻止默认的滚动行为。 handleTouchStart: 记录触摸开始的 Y 坐标和当前的 translateY 值。 handleTouchMove: 计算触摸移动的距离&#xff0c;并更新 translateY 值。 han…

大数据面试题之Presto[Trino](5)

目录 Presto的扩展性如何&#xff1f; Presto如何与Hadoop生态系统集成&#xff1f; Presto是否可以连接到NoSQL数据库&#xff1f; 如何使用Presto查询Kafka中的数据&#xff1f; Presto与Spark SQL相比有何优势和劣势&#xff1f; Presto如何与云服务集成&#xff1…

ImportError: DLL load failed while importing _imaging: 操作系统无法运行 %1

解决方案&#xff1a; &#xff08;1&#xff09;搜索打开Anaconda Prompt控制台&#xff0c;进入到自己要安装的环境下面去&#xff0c;卸载Pillow:pip uninstall Pillow 没有安装Pillow的就不用卸载&#xff0c;直接安装&#xff0c; &#xff08;2&#xff09;然后再安装&a…

芯片封装简介

1、背景 所谓“封装技术”是一种将集成电路用绝缘的塑料或陶瓷材料打包的技术。以CPU为例&#xff0c;实际看到的体积和外观并不是真正的CPU内核的大小和面貌&#xff0c;而是CPU内核等元件经过封装后的产品。封装技术对于芯片来说是必须的&#xff0c;也是至关重要的。因为芯片…

Python在现代办公自动化中的应用:会不会被裁?就看你的效率了!

Python在现代办公自动化中的应用&#xff1a;提升效率的艺术 Python&#xff0c;作为一门简洁而强大的编程语言&#xff0c;已经成为许多办公室英雄优化日常工作的秘密武器。本文将带你探索Python如何在办公自动化领域大放异彩&#xff0c;并且会巧妙融入开源神器PlugLink&…

注解的原理和解析

关于我 注解的定义 注解&#xff08;Annotation&#xff09;是一种用于为代码中的元素&#xff08;类、方法、变量等&#xff09;添加元数据的机制。它们不直接参与程序的逻辑操作&#xff0c;但可以在编译时或运行时被读取和处理&#xff0c;以实现特定的功能或行为。 为什…

Koa2实现多并发文件上传

koa2批量上传文件 目前的是为了实现批量导入md文件&#xff0c;发布文章。这样就不用自己一篇一篇同步文章了。一次可以同步几千篇文章。 实现界面 内容 主要包含上传的文件标题&#xff0c;文件大小&#xff0c;上传状态。 <el-upload ref"uploader" v-model:…

Vue笔记12-新的组件

Fragment 在Vue2中&#xff0c;template标签内&#xff0c;必须有一个div标签&#xff0c;作为根标签。 在Vue3中&#xff0c;可以没有div根标签&#xff0c;如果没有的话&#xff0c;Vue3会将多个标签包装在一个Fragment虚拟元素里。 这么做的目的&#xff1a;减少标签的层级…

【Java12】封装

封装&#xff08;Encapsulation&#xff09;是面向对象的三大特征之一&#xff08;另两个是继承和多态&#xff09;&#xff0c;指的是将对象的状态信息隐藏在对象内部&#xff0c;不允许外部程序直接访问对象的内部信息&#xff0c;而是通过该类所提供的方法来实现对内部信息的…

java入门3-java语法基础学习(类型转换)

&#xff08;一 &#xff09;自动类型转换 (1)类型范围小的变量可以直接赋值给类型范围大的变量 //自动类型转换执行原理 byte a12; a:00001100 (byte:8位的二进制) int ba; b:00000000 00000000 00000000 00001100 (int&a…

2024中期业绩预告

股票简称业绩预告类型业绩预告摘要净利润变动幅度(%)上年同期净利润(元)公告日期业绩变动原因报告期内公司所处行业情况报告期内公司从事的主要业务核心竞争力分析备注湖北宜化业绩大幅上升净利润51000万元至57000万元;增长幅度为102.09%至125.87%125.872.52亿7/8/2024预计2024…

找不到x3daudio1_7.dll怎么修复?一招搞定x3daudio1_7.dll丢失问题

当你的电脑突然弹出提示&#xff0c;“找不到x3daudio1_7.dll”&#xff0c;这时候你就需要警惕了。这往往意味着你的电脑中的程序出现了问题&#xff0c;你可能会发现自己无法打开程序&#xff0c;或者即便打开了程序也无法正常使用。因此&#xff0c;接下来我们要一起学习一下…

小程序 使用 UI 组件 Vant Weapp 、vant组件样式覆盖

注意&#xff1a;使用vant 包&#xff0c;需要把app.json 中 的"style:v2" 这句去掉 不然会出现样式混乱的问题 Vant Weapp组件库的使用 参考官网 vant官网 Vant Weapp 组件样式覆盖 Vant Weapp 基于微信小程序的机制&#xff0c;为开发者提供了 3 种修改组件样式…

深入了解Linux中的udhcpc:动态主机配置协议客户端

目录 什么是udhcpc&#xff1f;安装udhcpc配置网络接口使用udhcpc获取IP地址配置静态IP地址自定义udhcpc脚本高级选项udhcpc常见问题及排查方法1. 无法获取IP地址2. DNS配置不正确3. IP地址冲突4. 无法连接到默认网关5. 无法执行自定义脚本 在Linux系统中&#xff0c;网络配置是…

[数据结构] --- 线性数据结构(数组/链表/栈/队列)

1 线性结构和非线性结构的理解 1.1 线性结构 线性结构是什么&#xff1f; 数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。线性结构是一个有序数据元素的集合。 线性结构特点&#xff1a; 线性结构有唯一的首元素&#xff08;第一个元素&#…

leetcode力扣_贪心思想

455.分发饼干&#xff08;easy-自己想得出来并写好&#xff09; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺…

【CUDA】

笔者在学习Softmax实现时遇到了一个问题&#xff0c;很多文章直接将softmax的计算分成了五个过程&#xff0c;而没有解释每个过程的含义&#xff0c;尤其是在阅读这篇文章时&#xff0c;作者想计算最基本的softmax的效率&#xff0c;以展示可行的优化空间&#xff1a; 贴一个g…

前端html面试常见问题

前端html面试常见问题 1. !DOCTYPE (文档类型)的作用2. meta标签3. 对 HTML 语义化 的理解&#xff1f;语义元素有哪些&#xff1f;语义化的优点4. HTML中 title 、alt 属性的区别5. src、href 、url 之间的区别6. script标签中的 async、defer 的区别7. 行内元素、块级元素、空…

【python教程】数据分析——numpy、pandas、matplotlib

【python教程】数据分析——numpy、pandas、matplotlib 文章目录 什么是matplotlib安装matplotlib&#xff0c;画个折线 什么是matplotlib matplotlib:最流行的Python底层绘图库&#xff0c;主要做数据可视化图表,名字取材于MATLAB&#xff0c;模仿MATLAB构建 安装matplotlib&…