我正在使用PyInstaller将我的应用程序捆绑到一个.exe文件中。 问题是它使用--onedir选项工作正常,但在使用--onefile构建时无法找到模块。
在构建过程中,--onedir和--onefile都说:
<...>
INFO: Analyzing hidden import 'sklearn.utils.sparsetools._graph_validation'
<...>
运行使用--onedir创建的实例工作正常,但是--onefile生成的实例会死:
<...>
File "_min_spanning_tree.pyx", line 8, in init sklearn.utils.mst._min_spanning
_tree (sklearn\utils\sparsetools\_min_spanning_tree.c:4754)
ImportError: No module named _graph_validation
这是我的.spec文件
onedir.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')
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='.',
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 )
答案 0 :(得分:9)
我有同样的错误。解决方案是为sklearn创建一个钩子。 通常你需要创建一个这样的钩子文件
hiddenimports = ['sklearn.utils.sparsetools._graph_validation']
并将其保存在同一文件夹中名为hook-modulename.py
的文件中。但这只会导入_graph_validation。这可能会导致另一个模块出错。
最好通过
from hookutils import collect_submodules
hiddenimports = collect_submodules('sklearn')
并将其保存到同一文件夹中的挂钩文件中。对我来说,我必须创建2个钩子文件。一个用于sklearn,一个用于scipy。
from hookutils import collect_submodules
hiddenimports = collect_submodules('scipy')
保存后我使用下面的命令运行
pyinstaller --additional-hooks-dir =。 myfile.py
为了更好地理解,请点击http://pythonhosted.org/PyInstaller/hooks.html#understanding-pyinstaller-hooks
答案 1 :(得分:1)
只需在脚本中导入以下软件包即可将其转换为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
这有助于我解决此问题。