【问题标题】:Pyinstaller and sklearn.ensemble: 'ModuleNotFoundError: No module named 'sklearn.neighbors.quad_tree' [2760]'Pyinstaller 和 sklearn.ensemble:'ModuleNotFoundError:没有名为 'sklearn.neighbors.quad_tree' 的模块 [2760]'
【发布时间】:2018-03-29 14:02:40
【问题描述】:

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

按照this answer 中的建议,在\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 提示中。

但是,我得到了错误 RecursionError: maximum recursion depth exceeded.

另一方面,如果我只是跑 `pyinstaller visual_vitals.py'

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

对此我能做些什么?

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

【问题讨论】:

标签: python scikit-learn hook pyinstaller


【解决方案1】:

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

这是我的解决方法:

1.)使用命令:

> pyi-makespec -F visual_vitals.py

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

3.)用

找线
> hidden imports=[]

在规范文件中。

替换为

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

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

> import sys 
> 
> sys.setrecursionlimit(5000)

5.)运行:

> pyinstaller visual_vitals.spec

【讨论】:

    【解决方案2】:

    希望这可以帮助任何人

    `ModuleNotFoundError: No module named 'sklearn.*'`
    
    `ModuleNotFoundError: No module named 'h5py.*'`
    

    在构建 pyinstaller 期间或之后

    如果您收到 h5py 错误的示例

    运行pyinstaller myscript.py 后会生成myscript.spec

    进去myscript.spec

    # -*- mode: python ; coding: utf-8 -*-
    
    block_cipher = None
    
    a = Analysis(['myscript.py'],
             binaries=None,
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=None)
    # ... rest of a file untouched
    

    添加

    from PyInstaller.utils.hooks import collect_submodules
    
    hidden_imports = collect_submodules('h5py')
    

    hiddenimports=hidden_imports,
    

    这样

    # -*- mode: python ; coding: utf-8 -*-
    
    block_cipher = None
    
    from PyInstaller.utils.hooks import collect_submodules
    
    hidden_imports = collect_submodules('h5py')
    
    a = Analysis(['myscript.py'],
             binaries=None,
             datas=[],
             hiddenimports=hidden_imports,
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=None)
    # ... rest of a file untouched
    

    然后保存myscript.spec并运行命令pyinstaller myscript.spec

    归功于9dogs Pyinstaller created exe file can not load a keras nn model

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2021-03-23
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多