PyInstaller打包exe遇scipy.libs找不到错误求解决方案
PyInstaller打包时缺失scipy.libs的解决方法
问题描述
使用PyInstaller打包Python项目为exe,执行命令:pyinstaller -F --hidden-import=win32timezone --add-data "./data;data/" .\serviceWrapper.py
运行生成的exe时,因导入sklearn的linear_model模块触发以下错误:
Traceback (most recent call last): File "serviceWrapper.py", line 12, in <module> from main import main ... FileNotFoundError: [WinError 2] No such file or directory: 'C:\\Users\\07945A\\AppData\\Local\\Temp\\_MEI552362\\scipy.libs'
尝试添加--hidden-import=scipy和--hidden-import=scipy.libs参数后问题仍存在,需找到正确包含scipy.libs的方式。
解决方案
1. 手动在打包命令中添加scipy.libs的路径
PyInstaller的--add-data参数可直接指定scipy.libs目录的源路径和目标路径。先找到你的Python环境中scipy.libs的实际位置(比如虚拟环境下路径为venv\Lib\site-packages\scipy.libs),将其加入打包命令:
pyinstaller -F --hidden-import=win32timezone --add-data "./data;data/" --add-data "venv\Lib\site-packages\scipy.libs;scipy.libs/" .\serviceWrapper.py
注意:Windows系统下用分号
;分隔源路径和目标路径,目标路径需与程序运行时期望的路径(即scipy.libs/)一致。
2. 通过.spec文件自定义打包配置
- 先生成.spec文件:
pyinstaller -F --hidden-import=win32timezone --add-data "./data;data/" .\serviceWrapper.py --specpath ./
- 打开生成的
serviceWrapper.spec,找到datas数组,添加scipy.libs的条目:
datas = [('./data', 'data'), ('venv/Lib/site-packages/scipy.libs', 'scipy.libs')]
- 用.spec文件重新打包:
pyinstaller serviceWrapper.spec
3. 升级PyInstaller至最新版本
部分旧版PyInstaller对scipy的依赖处理存在缺陷,升级到最新版本可能自动解决scipy.libs的缺失问题:
pip install --upgrade pyinstaller
升级后重新执行原打包命令,验证问题是否解决。
内容的提问来源于stack exchange,提问作者Moosi312
相关产品推荐
相关产品推荐

