我有一个应用程序,我在其中添加了一个使用vispy
和scipy
(对于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和here
寻找DLL问题,我已经尝试过Dependency Walker,但没有运气。
如果我用vispy
图注释掉模块,一切正常。任何提示?
答案 0 :(得分:2)
我尝试通过添加main
和QApplication
QWigdet
来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
和{{1}}的存在。如果没有明确的包包(我的应用程序已经在使用PySide),它们就不在那里。
答案 1 :(得分:1)
我们还没有考虑过使用Vispy来冻结应用程序。我期待的陷阱与gmas80的答案相符; Vispy可以使用多个后端,这意味着它们是动态加载的,并且cx_Freeze无法选择后端模块作为依赖项。根据您需要的后端,您需要将vispy.backends
中的一些模块添加到包含列表中。