PyInstaller打包PyQt5 GUI遇sklearn.neighbors.quad_tree模块缺失错误
解决PyInstaller打包PyQt5+Sklearn程序时的ModuleNotFoundError问题
我来帮你搞定这个打包报错的问题!你遇到的ModuleNotFoundError: No module named 'sklearn.neighbors.quad_tree',本质是PyInstaller没法自动识别到Sklearn内部一些隐式依赖的子模块,尤其是像quad_tree这种被底层调用但没在你的代码里直接导入的模块。
这里有几个可行的解决办法:
方法一:在打包命令中补充缺失的hidden-import
直接把报错提示的缺失模块加到--hidden-import参数里,修改后的打包命令如下:pyinstaller -F visual_vitals.py --hidden-import sklearn.neighbors.typedefs --hidden-import sklearn.neighbors.quad_tree如果之后还出现其他类似的模块缺失错误,只需要继续在命令里追加对应的
--hidden-import 模块名即可。方法二:创建/修改Sklearn专属的hook文件
比起每次打包都加命令行参数,更省心的方式是给Sklearn创建一个专门的hook文件:- 打开你之前操作的
\Anaconda3\Lib\site-packages\PyInstaller\hooks路径 - 创建一个名为
hook-sklearn.py的文件(如果已经存在就直接编辑) - 在文件里添加所有需要的隐式依赖模块:
hiddenimports = [ 'sklearn.neighbors.typedefs', 'sklearn.neighbors.quad_tree', 'pandas._libs.tslibs.timedeltas' ]
这样后续打包时PyInstaller会自动加载这些隐藏依赖,不用再手动加参数。
- 打开你之前操作的
方法三:修改spec文件指定hiddenimports
如果你已经生成过.spec文件,可以直接编辑它来配置依赖:- 找到spec文件里的
hiddenimports列表(如果没有就新增这个字段) - 把缺失的模块添加进去,比如:
hiddenimports=['sklearn.neighbors.typedefs', 'sklearn.neighbors.quad_tree'] - 然后用spec文件重新打包:
pyinstaller visual_vitals.spec
- 找到spec文件里的
一般来说,用方法二或者方法一就能解决当前的问题,要是之后还有其他Sklearn相关的模块缺失,照着同样的思路把对应的模块加到hidden imports里就好。
内容的提问来源于stack exchange,提问作者ignoring_gravity
相关产品推荐
相关产品推荐

