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

PyInstaller打包PyQt5程序报错:属性错误与插件目录未找到

解决PyQt5 + PyInstaller打包时的三类常见错误

你从PyQt4迁移到PyQt5后用PyInstaller打包遇到的这几个问题其实挺常见的,我来给你逐个拆解解决:

问题回顾

你遇到的具体错误包括:

  1. AttributeError: module 'enum' has no attribute 'IntFlag'
  2. ModuleNotFoundError: No module named 'sip'
  3. Exception: Cannot find PyQt5 plugin directories

对应的完整回溯信息如下:

Traceback (most recent call last):
File "<string>", line 2, in <module>
ModuleNotFoundError: No module named 'sip'
Traceback (most recent call last):
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts\pyinstaller-script.py", line 11, in <module>
load_entry_point('PyInstaller==3.4.dev0+ab8fd9753', 'console_scripts', 'pyinstaller')()
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\__main__.py", line 94, in run
run_build(pyi_config, spec_file, **vars(args))
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\__main__.py", line 46, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\building\build_main.py", line 791, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\building\build_main.py", line 737, in build
exec(text, spec_namespace)
File "<string>", line 16, in <module>
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\building\build_main.py", line 213, in __init__
self.__postinit__()
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\building\datastruct.py", line 161, in __postinit__
self.assemble()
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\building\build_main.py", line 472, in assemble
module_hook.post_graph()
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\building\imphook.py", line 410, in post_graph
self._load_hook_module()
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\building\imphook.py", line 377, in _load_hook_module
self.hook_module_name, self.hook_filename)
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\compat.py", line 744, in importlib_load_source
return mod_loader.load_module()
File "<frozen importlib._bootstrap_external>", line 399, in _check_name_wrapper
File "<frozen importlib._bootstrap_external>", line 823, in load_module
File "<frozen importlib._bootstrap_external>", line 682, in load_module
File "<frozen importlib._bootstrap>", line 265, in _load_module_shim
File "<frozen importlib._bootstrap>", line 684, in _load
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\hooks\hook-PyQt5.QtCore.py", line 15, in <module>
binaries = qt_plugins_binaries('codecs', namespace='PyQt5')
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 65, in qt_plugins_binaries
pdir = qt_plugins_dir(namespace=namespace)
File "c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyInstaller\utils\hooks\qt.py", line 39, in qt_plugins_dir
raise Exception('Cannot find {0} plugin directories'.format(namespace))
Exception: Cannot find PyQt5 plugin directories

逐个解决错误

1. 解决AttributeError: module 'enum' has no attribute 'IntFlag'

这个问题几乎都是因为你安装了第三方的enum34包,和Python3.6+自带的enum模块冲突了(Python3.6及以上版本已经内置了enum.IntFlag)。

解决步骤:
打开命令行执行:

pip uninstall -y enum34

卸载后重启你的Python环境,再尝试打包即可。

2. 解决ModuleNotFoundError: No module named 'sip'

在新版PyQt5中,sip已经成为一个独立的依赖包,PyInstaller有时候无法自动识别它。

解决步骤:

  • 首先确保你已经安装了sip:
pip install sip
  • 如果安装后还是报错,打包时手动指定隐藏导入:
pyinstaller --hidden-import sip your_script.py

或者你可以编辑生成的.spec文件,在Analysis部分的hiddenimports列表里添加sip:

a = Analysis(['your_script.py'],
             ...
             hiddenimports=['sip'],
             ...)

3. 解决Exception: Cannot find PyQt5 plugin directories

这个问题通常是因为PyInstaller版本过旧,或者无法正确定位PyQt5的插件目录。

解决步骤:

  1. 先升级PyInstaller到最新稳定版:
pip install --upgrade pyinstaller

(你当前用的是PyInstaller==3.4.dev0,这个开发版bug较多,升级到正式版大概率能解决)

  1. 如果升级后还是不行,手动指定PyQt5的插件路径:
    • 先找到你PyQt5的插件目录,通常在Python的site-packages文件夹下的PyQt5\plugins,比如你的路径可能是c:\program files (x86)\microsoft visual studio\shared\python36_64\lib\site-packages\PyQt5\plugins
    • 打包时用--add-data参数(Windows用分号分隔路径,Linux/macOS用冒号):
    pyinstaller --add-data "C:\path\to\PyQt5\plugins;PyQt5\plugins" your_script.py
    
    • 或者编辑.spec文件,添加插件目录到datas:
    from PyInstaller.utils.hooks import qt_plugins_dir
    plugin_path = qt_plugins_dir('PyQt5')
    a = Analysis(['your_script.py'],
                 datas=[(plugin_path, 'PyQt5/plugins')],
                 ...)
    

按照这个顺序逐个解决,应该就能顺利打包了。

内容的提问来源于stack exchange,提问作者주영준

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:23:31