【问题标题】:Unable to freeze application when vispy/scipy in use使用 vispy/scipy 时无法冻结应用程序
【发布时间】:2014-10-25 05:05:56
【问题描述】:

我有一个应用程序,我在其中添加了一个模块,该模块使用 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 情节注释掉模块,一切正常。有什么提示吗?

【问题讨论】:

  • 有足够声誉的人可以为vispy 创建标签吗?我相信这在不久的将来会很受欢迎..
  • 标签已创建!
  • 目前使用 scipy 冻结代码是一团糟——有an issue open 。我希望在 cx_Freeze 的下一个版本中做得更好,但要找到时间来处理它是很棘手的。

标签: python scipy pyside cx-freeze vispy


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2019-01-27
      • 2017-10-18
      • 2011-04-24
      • 2019-11-04
      • 2015-05-09
      相关资源
      最近更新 更多