You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInstaller将Python脚本转为.exe时遇libiconv.dll加载错误

PyInstaller打包含pyzbar脚本时libiconv.dll加载失败的解决方案

问题详情

运行打包生成的exe时出现如下错误回溯:

Traceback (most recent call last):
File "PyInstaller\loader\pyimod03_ctypes.py", line 53, in __init__
File "ctypes\__init__.py", line 376, in __init__
OSError: [WinError 193] %1 is not a valid Win32 application

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "pyzbar\zbar_library.py", line 58, in load
File "pyzbar\zbar_library.py", line 50, in load_objects
File "pyzbar\zbar_library.py", line 51, in <listcomp>
File "ctypes\__init__.py", line 454, in LoadLibrary
File "PyInstaller\loader\pyimod03_ctypes.py", line 55, in __init__
pyimod03_ctypes.install.<locals>.PyInstallerImportError: Failed to load dynlib/dll 
'C:\\Users\\ahmedb\\AppData\\Local\\Temp\\_MEI315562\\libiconv.dll'. Most likely this 
dynlib/dll was not found when the application was frozen.

During the 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 376, in __init__
OSError: [WinError 193] %1 is not a valid Win32 application

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "New_project.py", line 16, in <module>
File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
File "pyzbar\pyzbar.py", line 7, in <module>
File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 385, in exec_module
File "pyzbar\wrapper.py", line 151, in <module>
File "pyzbar\wrapper.py", line 148, in zbar_function
File "pyzbar\wrapper.py", line 127, in load_libzbar
File "pyzbar\zbar_library.py", line 60, in load
File "pyzbar\zbar_library.py", line 50, in load_objects
File "pyzbar\zbar_library.py", line 51, in <listcomp>
File "ctypes\__init__.py", line 454, in LoadLibrary
File "PyInstaller\loader\pyimod03_ctypes.py", line 55, in __init__
pyimod03_ctypes.install.<locals>.PyInstallerImportError: Failed to load dynlib/dll 
C:\\Users\\ahmedb\\AppData\\Local\\Temp\\_MEI315562\\libiconv.dll'. Most likely this 
dynlib/dll was not found when the application was frozen.

使用的打包命令:

pyinstaller --noconfirm --onefile --windowed --icon "C:/Users/ahmedb/Desktop/app/logo.ico" --add-data "C:/Users/ahmedb/Desktop/app/haarcascade_frontalface_default.xml;." --add-binary "C:/Users/ahmedb/Desktop/app/libiconv.dll;." "C:/Users/ahmedb/Desktop/app/New_project.py"

解决方案

  • 匹配dll与Python的位数
    WinError193核心原因是32位dll和64位Python环境不兼容,反之亦然。先确认Python位数:
    在命令行执行:
python -c "import sys; print(sys.maxsize > 2**32)"

返回True为64位,False为32位。下载对应位数的libiconv.dll替换脚本目录中的现有文件。

  • 使用pyzbar自带的dll文件
    pyzbar安装包自带适配的dll文件,找到Python环境下的Lib\site-packages\pyzbar文件夹(比如C:\Users\ahmedb\AppData\Local\Programs\Python\PythonXX\Lib\site-packages\pyzbar),复制里面的libiconv.dll和libzbar.dll到脚本目录,然后修改打包命令的--add-binary参数指向这些文件。

  • 修正打包命令的路径格式
    Windows下建议用反斜杠作为路径分隔符,或者确保正斜杠路径正确。简化后的打包命令示例:

pyinstaller --noconfirm --onefile --windowed --icon "C:\Users\ahmedb\Desktop\app\logo.ico" --add-data "C:\Users\ahmedb\Desktop\app\haarcascade_frontalface_default.xml;." --add-binary "libiconv.dll;." "C:\Users\ahmedb\Desktop\app\New_project.py"
  • 通过spec文件手动配置dll
  1. 生成基础spec文件:
pyinstaller --name MyApp --onefile --windowed "C:/Users/ahmedb/Desktop/app/New_project.py"
  1. 打开生成的MyApp.spec,在binaries列表中添加dll路径:
a = Analysis(
    ['C:/Users/ahmedb/Desktop/app/New_project.py'],
    pathex=[],
    binaries=[
        ('C:/Users/ahmedb/Desktop/app/libiconv.dll', '.'),
        ('C:/Users/ahmedb/AppData/Local/Programs/Python/PythonXX/Lib/site-packages/pyzbar/libzbar.dll', '.')
    ],
    datas=[('C:/Users/ahmedb/Desktop/app/haarcascade_frontalface_default.xml', '.')],
    # 其余配置保持不变
)
  1. 用spec文件重新打包:
pyinstaller MyApp.spec
  • 降级pyzbar版本
    部分新版本pyzbar在打包时存在兼容性问题,尝试降级到稳定版本:
pip uninstall pyzbar -y && pip install pyzbar==0.1.9

内容的提问来源于stack exchange,提问作者Ahmed Abdulaziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:06:03