哪些网站可以做帮助文档,我想接app纯注册推广单,wordpress 素锦,系统管理软件下载目录 前言问题问题的出现解决 总结 本文由Jzwalliser原创#xff0c;发布在CSDN平台上#xff0c;遵循CC 4.0 BY-SA协议。 因此#xff0c;若需转载/引用本文#xff0c;请注明作者并附原文链接#xff0c;且禁止删除/修改本段文字。 违者必究#xff0c;谢谢配合。 个人… 目录 前言问题问题的出现解决 总结 本文由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-dataicon_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 listcompFile 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 moduleFile 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 moduleFile 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 moduleFile 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 listcompFile 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-dataicon_clear.ico:. --add-datalibiconv.dll:./pyzbar/ --add-datalibzbar-64.dll:./pyzbar/ QRCodeReader.py大家也可以参考一下。
总结
所以如果想用pyinstaller打包和pyzbar有关的脚本请提前将C:\Users\Lenovo\AppData\Local\Programs\Python\Python39\Lib\site-packages\pyzbar文件夹下的libiconv.dll和 libzbar-64.dll复制到工作目录下并在打包命令中添加--add-datalibzbar-64.dll:./pyzbar/ --add-datalibiconv.dll:./pyzbar/两个参数。