PyInstaller打包Python脚本生成exe无法找到scipy依赖dll问题求助
解决方案
你遇到的问题根源是Anaconda源安装的scipy 1.2.1依赖Intel MKL数学库的相关DLL,PyInstaller 3.5对Python 2.7环境下的conda类第三方库依赖识别存在缺陷,不会自动采集这些不在site-packages目录下的系统级DLL,导致无Anaconda环境的设备运行时缺少依赖直接崩溃。
步骤1:定位缺失的DLL文件
不需要找不存在的extra-dll文件夹,直接打开你的虚拟环境根目录anaconda3\myenv\,在搜索框搜索以下名称的DLL,全部复制出来:
- 所有
mkl_开头的DLL(比如mkl_core.dll、mkl_intel_thread.dll、mkl_avx.dll等) libiomp5md.dll
步骤2:将DLL加入打包配置
两种可选方案,选任意一种即可:
方案A:命令行直接打包
把刚才找到的所有DLL放到你的Python脚本同级目录下的mkl_dll文件夹中,执行以下打包命令:
pyinstaller -F --add-binary "mkl_dll/*.dll;." 你的脚本名.py
参数说明:
-F表示生成单EXE文件,如果需要生成文件夹形式可以去掉该参数--add-binary后的参数中,Windows系统用分号分隔源路径和目标路径,.表示DLL最终和EXE放在同一目录
方案B:修改spec文件配置
- 先执行命令生成spec配置文件:
pyi-makespec 你的脚本名.py - 打开生成的
.spec文件,找到Analysis块的binaries参数,修改为如下格式,把你找到的每个DLL都按规则填入:
a = Analysis( ['你的脚本名.py'], binaries=[ ('C:/path/to/mkl_core.dll', '.'), ('C:/path/to/libiomp5md.dll', '.'), # 其他DLL依次按上述格式添加 ], # 其余原有配置保持不变 )
- 保存spec文件后执行打包命令:
pyinstaller 你的脚本名.spec
验证方法
把生成的EXE文件拷贝到没有安装Anaconda、Python的干净Windows设备上运行,确认可以正常输出拟合参数popt的结果即表示修复完成。
内容的提问来源于stack exchange,提问作者throughalfanoir
相关产品推荐
相关产品推荐

