Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scikit learn PyInstaller:模块未包含在--onefile中,但可以与--onedir一起使用_Scikit Learn_Pyinstaller_File Not Found - Fatal编程技术网

Scikit learn PyInstaller:模块未包含在--onefile中,但可以与--onedir一起使用

Scikit learn PyInstaller:模块未包含在--onefile中,但可以与--onedir一起使用,scikit-learn,pyinstaller,file-not-found,Scikit Learn,Pyinstaller,File Not Found,我正在使用PyInstaller将我的应用程序捆绑到一个.exe文件中。 问题是它可以与--onedir选项配合使用,但在使用--onefile构建时找不到模块 --onedir和--onefile都表示在构建过程中: <...> INFO: Analyzing hidden import 'sklearn.utils.sparsetools._graph_validation' <...> onefile.spec # -*- mode: python -*- a =

我正在使用PyInstaller将我的应用程序捆绑到一个.exe文件中。 问题是它可以与--onedir选项配合使用,但在使用--onefile构建时找不到模块

--onedir和--onefile都表示在构建过程中:

<...>
INFO: Analyzing hidden import 'sklearn.utils.sparsetools._graph_validation'
<...>
onefile.spec

# -*- mode: python -*-
a = Analysis(['../../brainactivity.py'],
             hiddenimports=['greenlet', 'sklearn.utils.sparsetools._graph_validation', 'sklearn.utils.sparsetools._graph_tools', 'scipy.special._ufuncs_cxx', 'sklearn.utils.lgamma', 'sklearn.utils.weight_vector'],
             hookspath=None,
             runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='brainactivity.exe',
          debug=False,
          strip=None,
          upx=True,
          console=True,)
coll = COLLECT(exe,
               a.binaries,
               [('./data/201305182224-DF-facial-3-420.csv', '../../data/201305182224-DF-facial-3-420.csv', 'DATA')],
               [('./model/brain_20k_colored_properly.obj', '../../model/brain_20k_colored_properly.obj', 'DATA')],
               [('brain_fragment_shader.glsl', '../../brain_fragment_shader.glsl', 'DATA')],
               [('brain_vertex_shader.glsl', '../../brain_vertex_shader.glsl', 'DATA')],
               a.zipfiles,
               a.datas,
               strip=None,
               upx=True,
               name='brainactivity')
# -*- mode: python -*-
a = Analysis(['../../brainactivity.py'],
             hiddenimports=['greenlet', 'sklearn.utils.sparsetools._graph_validation', 'sklearn.utils.sparsetools._graph_tools', 'scipy.special._ufuncs_cxx', 'sklearn.utils.lgamma', 'sklearn.utils.weight_vector'],
             hookspath='.',
             runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          [('./data/201305182224-DF-facial-3-420.csv', '../../data/201305182224-DF-facial-3-420.csv', 'DATA')],
          [('./model/brain_20k_colored_properly.obj', '../../model/brain_20k_colored_properly.obj', 'DATA')],
          [('brain_fragment_shader.glsl', '../../brain_fragment_shader.glsl', 'DATA')],
          [('brain_vertex_shader.glsl', '../../brain_vertex_shader.glsl', 'DATA')],
          a.zipfiles,
          a.datas,
          name='brainactivity.exe',
          debug=False,
          strip=None,
          upx=True,
          console=True )

我也犯了同样的错误。解决方案是为sklearn创建一个钩子。 通常,您需要像这样创建一个钩子文件

hiddenimports = ['sklearn.utils.sparsetools._graph_validation'] 
并将其保存在同一文件夹中名为
hook modulename.py
的文件中。但这将只导入_graph_验证。这可能会导致另一个模块出错。 最好通过以下方式导入包中的所有子模块:

from hookutils import collect_submodules
hiddenimports = collect_submodules('sklearn') 
并将其保存到同一文件夹中的挂钩文件中。对我来说,我必须创建2个钩子文件。一个给sklearn,一个给scipy

from hookutils import collect_submodules
hiddenimports = collect_submodules('scipy') 
保存它们后,我使用下面的命令运行

pyinstaller——附加挂钩目录=。myfile.py


为了更好地理解以下内容。

只需在要转换为exe文件的脚本中导入以下程序包

 import xgboost
 import sklearn.ensemble
 import sklearn.tree
 import pickle
 import pandas as pd
 import sklearn.neighbors.typedefs
 import sklearn.neighbors.quad_tree
 import sklearn.tree._utils
 import cython
 import sklearn
 import sklearn.utils._cython_blas
 import numpy as np
 import joblib
 from sklearn.preprocessing import StandardScaler

这有助于我解决此问题。

对于pyinstaller 3,您必须使用以下代码导入collect_子模块:
从pyinstaller.utils.hooks导入collect_子模块
您保存了我的一天,感谢此hookutils名称更改为hooks:您可以在规范文件的钩子
 import xgboost
 import sklearn.ensemble
 import sklearn.tree
 import pickle
 import pandas as pd
 import sklearn.neighbors.typedefs
 import sklearn.neighbors.quad_tree
 import sklearn.tree._utils
 import cython
 import sklearn
 import sklearn.utils._cython_blas
 import numpy as np
 import joblib
 from sklearn.preprocessing import StandardScaler