PyInstaller打包PyQt5程序报错:缺失依赖库及隐藏导入问题求助
PyQt5程序PyInstaller打包exe报错及警告解决方法
我用PyQt5开发程序,通过PyInstaller打包为exe文件后运行报错。重装PyInstaller后,打包过程出现以下警告:
95114 WARNING: No django root directory could be found! 103900 WARNING: Hidden import "django.db.backends.__pycache__.base" not found! 107726 WARNING: Hidden import "importlib_resources.trees" not found! 117667 WARNING: Hidden import "django.db.backends.oracle.compiler" not found! 123478 WARNING: get_package_paths - package pywin32_system32 has multiple paths (['C:\Users\wonjong\AppData\Roaming\Python\Python39\site-packages\pywin32_system32', 'C:\Users\wonjong\anaconda3\envs\geum\lib\site-packages\pywin32_system32']); returning only first one! 137583 WARNING: Library not found: could not resolve 'sycl6.dll', dependency of 'C:\Users\wonjong\anaconda3\envs\geum\Library\bin\omptarget.sycl.wrap.dll'. 137584 WARNING: Library not found: could not resolve 'pgc.dll', dependency of 'C:\Users\wonjong\anaconda3\envs\geum\Library\bin\mkl_pgi_thread.2.dll'. 137584 WARNING: Library not found: could not resolve 'pgf90.dll', dependency of 'C:\Users\wonjong\anaconda3\envs\geum\Library\bin\mkl_pgi_thread.2.dll'. 137585 WARNING: Library not found: could not resolve 'pgmath.dll', dependency of 'C:\Users\wonjong\anaconda3\envs\geum\Library\bin\mkl_pgi_thread.2.dll'. 137585 WARNING: Library not found: could not resolve 'msmpi.dll', dependency of 'C:\Users\wonjong\anaconda3\envs\geum\Library\bin\mkl_blacs_msmpi_lp64.2.dll'. 137586 WARNING: Library not found: could not resolve 'msmpi.dll', dependency of 'C:\Users\wonjong\anaconda3\envs\geum\Library\bin\mkl_blacs_msmpi_ilp64.2.dll'.
试过添加hiddenimport、升级PyInstaller、为报错路径加钩子等方法均无效,以下是针对性解决方案:
创建纯净虚拟环境,隔离冗余依赖
当前Anaconda环境混入了Django、MKL等无关依赖,导致PyInstaller误检测。用venv创建只包含PyQt5和PyInstaller的纯净环境:python -m venv pyqt_env # Windows激活环境 pyqt_env\Scripts\activate # 仅安装必需包 pip install pyqt5 pyinstaller将代码复制到该环境重新打包,避免无关依赖干扰。
排除无关模块,消除警告
- Django相关警告:若程序未使用Django,打包时直接排除该模块:
pyinstaller --exclude-module django your_script.py - MKL相关DLL警告:若程序不依赖科学计算库,排除MKL模块:
pyinstaller --exclude-module mkl your_script.py - pywin32多路径警告:删除其中一个路径下的
pywin32_system32包,或打包时指定优先路径:pyinstaller --paths "C:\Users\wonjong\anaconda3\envs\geum\lib\site-packages\pywin32_system32" your_script.py
- Django相关警告:若程序未使用Django,打包时直接排除该模块:
用.spec文件精细控制打包配置
先生成spec文件,手动编辑后打包:pyinstaller --name your_app your_script.py打开
your_app.spec,修改以下配置:- 在
excludes中添加无关模块:excludes=['django', 'mkl'] - 仅在
hiddenimports中添加PyQt5必需模块(如PyQt5.QtWidgets) - 若必须依赖特定DLL,通过
binaries手动指定:binaries=[('C:\\Users\\wonjong\\anaconda3\\envs\\geum\\Library\\bin\\msmpi.dll', '.')]
最后用spec文件打包:
pyinstaller your_app.spec- 在
修改PyInstaller钩子,避免误引入
找到虚拟环境下PyInstaller的钩子目录(pyqt_env\Lib\site-packages\PyInstaller\hooks),删除或重命名hook-django.py等无关钩子文件,阻止PyInstaller自动检测引入这些模块。
内容的提问来源于stack exchange,提问作者Grace
相关产品推荐
相关产品推荐

