2

我有一个应用程序,我在其中添加了一个模块,该模块使用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 py2exe and here

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

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

4

2 回答 2

2

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

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

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

我在构建目录中发现的不同之处在于QtOpenGL4.dll和的存在PySide.QtOpenGL.pyd。如果没有明确的包包含,它们就不存在(我的应用程序已经在使用 PySide)。

于 2014-10-25T22:09:00.460 回答
1

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

于 2014-12-02T22:32:18.117 回答