我有一个应用程序,其中添加了一个模块,该模块使用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 = '[email protected]',
  options = dict(build_exe = buildOptions),
  executables = executables)


我必须添加'scipy.sparse.csgraph._validation'来修复先前缺少的内容,如此处建议的:scipy with py2exehere

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

如果我用vispy图注释掉模块,则一切正常。有什么提示吗?

最佳答案

我试图通过添加带有mainQApplication和显示QWigdetvispy.app.canvas来冻结问题所在的模块。这很有帮助,因为我得到了一个与vispy.app.backends._pyside相关的非常有用的回溯错误。

将其明确添加到我发布的cx_freeze脚本中后,冻结的应用程序可以工作:

packages = ['osgeo._gdal', 'vispy.app.backends._pyside', 'scipy.sparse.csgraph._validation']


我在构建目录中发现的区别是QtOpenGL4.dllPySide.QtOpenGL.pyd的存在。没有明确的软件包包含,他们就在那里(我的应用程序已经在使用PySide)。

10-07 13:28