gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:56:19 27 4
gpt4 key购买 nike

我正在使用 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 )

最佳答案

我有同样的错误。解决方案是为 sklearn 创建一个钩子(Hook)。
一般来说,你需要像这样创建一个钩子(Hook)文件

hiddenimports = ['sklearn.utils.sparsetools._graph_validation'] 

并将其保存在名为 hook-modulename.py 的文件中在同一个文件夹中。但这只会导入_graph_validation。这可能会导致另一个模块出错。
最好通过以下方式导入包中的所有子模块
from hookutils import collect_submodules
hiddenimports = collect_submodules('sklearn')

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

保存它们后,我使用下面的命令运行

pyinstaller --additional-hooks-dir=. myfile.py



为了更好地理解,请关注 this link .

关于scikit-learn - PyInstaller:模块不包含在 --onefile 中,但可以与 --onedir 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20602721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com