Невозможно заморозить приложение при использовании vispy/scipy

У меня есть приложение, в котором я добавил модуль, отображающий данные с использованием vispy и scipy (для Делоне). Он отлично работает, когда я запускаю интерпретатор Python (3.4 x64 в Windows), но не при зависании с использованием 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 с py2exe и здесь

В поисках проблем с DLL я уже пытался использовать Dependency Walker, но безуспешно.

Если я закомментирую модуль с графиком vispy, все будет нормально. Любой намек?


person gmas80    schedule 25.10.2014    source источник
comment
Может ли кто-нибудь с достаточной репутацией создать тег для vispy? Я думаю, что в ближайшем будущем он будет очень популярен.   -  person gmas80    schedule 25.10.2014
comment
тег создан!   -  person Saullo G. P. Castro    schedule 25.10.2014
comment
Замораживание кода с использованием scipy в настоящее время представляет собой беспорядок — есть проблема открыта для него. Я надеюсь улучшить ситуацию к следующему выпуску cx_Freeze, но найти время для работы над ним непросто.   -  person Thomas K    schedule 26.10.2014


Ответы (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. Их не было без явного включения пакета (в моем приложении уже использовался PySide).

person gmas80    schedule 25.10.2014

Мы еще не думали о замораживании приложений с помощью Vispy. Ловушка, которую я ожидаю, совпадает с ответом gmas80; Vispy может использовать несколько бэкендов, что означает, что они загружаются динамически, а cx_Freeze не может выбрать бэкэнд-модули в качестве зависимости. В зависимости от того, какой бэкенд вам нужен, вам нужно добавить некоторые модули в vispy.backends в список включений.

person Almar    schedule 02.12.2014