Pyinstaller 和 sklearn.ensemble: 'ModuleNotFoundError: No module named 'sklearn.neighbors.quad_tree' [2760]'

mar*_*lli 2 python hook pyinstaller scikit-learn

我在 PyQt5 中编写了一个 GUI,其中包括 from sklearn.ensemble import RandomForestClassifier.

按照此答案中的建议,在 中\Anaconda3\Lib\site-packages\PyInstaller\hooks,我添加了一个名为的文件hook-pandas.py,其中包含以下内容:

hiddenimports = ['pandas._libs.tslibs.timedeltas', 'sklearn.neighbors.typedefs']

之后,我尝试pyinstaller -F visual_vitals.py --hidden-import sklearn.neighbors.typedefs 在 Anaconda Prompt 中运行 。

但是,我收到错误 RecursionError: maximum recursion depth exceeded

另一方面,如果我只运行`pyinstaller visual_vitals.py'

然后 .exe 正确构建,当我尝试运行它时,我收到消息 modulenotfounderror: no module named 'sklearn.neighbors.quad_tree'

我该怎么办?

请注意,如果我使用支持向量分类器而不是随机森林,问题就会消失,因此问题特定于该分类器而不是整个sklearn.

小智 5

我在使用 sklearn 和 pyinstaller 时遇到了同样的问题。

这是我解决它的方法:

1.)使用命令:

> pyi-makespec -F visual_vitals.py
Run Code Online (Sandbox Code Playgroud)

2.) 这将创建一个名为vitals.spec 的文件

3.) 找线

> hidden imports=[]
Run Code Online (Sandbox Code Playgroud)

在规范文件中。

将其替换为

> hiddenimports = ['pandas._libs.tslibs.timedeltas',
>                  'sklearn.neighbors.typedefs']
Run Code Online (Sandbox Code Playgroud)

4.) 添加这两行以增加规范文件开头的递归限制

> import sys 
> 
> sys.setrecursionlimit(5000)
Run Code Online (Sandbox Code Playgroud)

5.) 运行:

> pyinstaller visual_vitals.spec
Run Code Online (Sandbox Code Playgroud)