我正在使用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 )
小智.. 13
我有同样的错误.解决方案是为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
我有同样的错误.解决方案是为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