在使用vispy / scipy时无法冻结应用程序

时间:2014-10-25 05:05:57

标签: python scipy pyside cx-freeze vispy

我有一个应用程序,我在其中添加了一个使用vispyscipy(对于Delaunay)绘制数据的模块。 当我在Python(Windows上为3.4 x64)解释器中运行时,它工作正常,但在使用cx_freeze冻结时则不行。它没有给我任何错误信息,只是它没有运行(安静地)。

这是我的cx_freeze脚本:

buildOptions = dict(packages = ['osgeo._gdal', 'scipy.sparse.csgraph._validation'])

import sys
base = 'Win32GUI' if sys.platform=='win32' else None

executables = [
    Executable('main.py', base=base, targetName = 'myApp.exe', icon='ico/myApp.ico')
    ]

setup(name='MyApp',
  version = '0.0.1',
  description = 'My fancy app',
  author = 'xxxx@xxxx.xxx',
  options = dict(build_exe = buildOptions),
  executables = executables)

我必须添加'scipy.sparse.csgraph._validation'来修复之前缺少的包含内容,如下所示:scipy with py2exehere

寻找DLL问题,我已经尝试过Dependency Walker,但没有运气。

如果我用vispy图注释掉模块,一切正常。任何提示?

2 个答案:

答案 0 :(得分:2)

我尝试通过添加mainQApplication QWigdetvispy.app.canvasvispy.app.backends._pyside来解冻问题模块。这有帮助,因为我得到了与cx_freeze相关的非常有用的回溯错误。

将此明确添加到我发布的packages = ['osgeo._gdal', 'vispy.app.backends._pyside', 'scipy.sparse.csgraph._validation'] 脚本后,冻结的应用程序将起作用:

QtOpenGL4.dll

我在构建目录中发现的差异是PySide.QtOpenGL.pyd和{{1}}的存在。如果没有明确的包包(我的应用程序已经在使用PySide),它们就不在那里。

答案 1 :(得分:1)

我们还没有考虑过使用Vispy来冻结应用程序。我期待的陷阱与gmas80的答案相符; Vispy可以使用多个后端,这意味着它们是动态加载的,并且cx_Freeze无法选择后端模块作为依赖项。根据您需要的后端,您需要将vispy.backends中的一些模块添加到包含列表中。