PyInstaller:一个模块不包含在--onefile中,但与--onedir一起工作正常

 jack1881的天空_925 发布于 2023-02-10 11:49

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

1 个回答
  • 我有同样的错误.解决方案是为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

    2023-02-10 11:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有