Python pyinstaller在隐藏导入中添加嵌套模块无效

Python pyinstaller在隐藏导入中添加嵌套模块无效,python,scikit-learn,pyinstaller,Python,Scikit Learn,Pyinstaller,我正在使用pyinstaller将“.py”脚本转换为exe文件。该脚本获取一些CLI参数,并在其上运行scikit learn和keras模型,然后返回预测。当像“python3 predict.py”一样执行时,.py工作正常。 但是,当我使用: pyinstaller --onefile predict.py 它给出了以下错误: ModuleNotFoundError: No module named 'sklearn.neighbors._typedefs' 但当我查看pip3列表时

我正在使用pyinstaller将“.py”脚本转换为exe文件。该脚本获取一些CLI参数,并在其上运行scikit learn和keras模型,然后返回预测。当像“python3 predict.py”一样执行时,.py工作正常。 但是,当我使用:

pyinstaller --onefile predict.py
它给出了以下错误:

ModuleNotFoundError: No module named 'sklearn.neighbors._typedefs'
但当我查看pip3列表时,我可以清楚地看到scikit learn安装在那里。 在对堆栈溢出进行搜索后,我了解到pyinstaller在获取二级依赖项时遇到问题,可以通过在隐藏导入中添加库来解决。我是这样做的:

a = Analysis(['predict.py'],
             pathex=['/Users/mac/Desktop/Fiverr/Clothes_Classification/Scripts'],
             binaries=[],
             datas=[],
             hiddenimports=['sklearn.neighbors._typedefs'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
./predict "/Users/mac/Desktop/Fiverr/Clothes_Classification/Dataset/Images/5336-0010.jpg" "/Users/mac/Desktop/Fiverr/Clothes_Classification/Scripts/Models/"
但同样的错误仍然存在。keras的模型输出很好,但sklearn的所有模型都失败了。另外,我正在使用pickle加载sklearn的模型,并从keras加载_模型来加载keras模型

我是这样执行的:

a = Analysis(['predict.py'],
             pathex=['/Users/mac/Desktop/Fiverr/Clothes_Classification/Scripts'],
             binaries=[],
             datas=[],
             hiddenimports=['sklearn.neighbors._typedefs'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
./predict "/Users/mac/Desktop/Fiverr/Clothes_Classification/Dataset/Images/5336-0010.jpg" "/Users/mac/Desktop/Fiverr/Clothes_Classification/Scripts/Models/"
其中给出了程序中sys.argv使用的2个CLI。我认为他们没有问题


任何帮助都将不胜感激。谢谢

应将.spec文件修改为隐藏导入
typdefs
(请注意缺少的下划线)
hiddenimports=['sklearn.neights.typedefs',

而不是
hiddenimports=['sklearn.neights.\u typedefs'],

由于错误可能会建议将.spec文件修改为隐藏导入
typdefs
(注意缺少下划线)
hiddenimports=['sklearn.neights.typedefs',

而不是
hiddenimports=['sklearn.neights.\u typedefs'],
正如错误可能暗示的那样