使用PyInstaller打包含Scipy的Python程序时遇模块导入错误
解决PyInstaller打包时scipy._trlib的导入错误
看来你在PyInstaller打包的路上又遇到了scipy相关的小坑!之前解决pandas的hidden import问题的思路其实完全可以复用在这里,给你几个快速解决的方案:
方法一:创建scipy对应的hook文件
既然你已经用过hook文件搞定pandas的问题,那这个操作对你来说应该轻车熟路啦。在你的项目根目录下创建一个名为hook-scipy.py的文件,里面只需要写一行:hiddenimports = ['scipy.optimize._trlib']然后打包的时候指定hook文件所在的目录:
pyinstaller -F --additional-hooks-dir=. myfile.py这样PyInstaller就会自动加载这个hook,把缺失的模块包含进打包文件里。
方法二:直接在打包命令里指定hidden import
如果你不想额外创建文件,也可以直接在打包命令里加参数一步到位:pyinstaller -F --hidden-import scipy.optimize._trlib myfile.py这个方法更简洁,适合临时解决单个模块缺失的问题。
额外提示
如果之后打包还遇到其他类似No module named xxx的错误,都可以用同样的思路处理:要么把缺失的模块添加到hook文件的hiddenimports列表里,要么直接用--hidden-import xxx参数追加进去。毕竟PyInstaller的自动模块分析偶尔会漏掉一些动态导入的内部子模块,尤其是像scipy这种依赖C扩展的库。
内容的提问来源于stack exchange,提问作者rnso
相关产品推荐
相关产品推荐

