Исполняемый файл Python с VTK pyinstaller, py2exe, cx_freeze и т. д.

Я создал графический интерфейс на питоне, используя pyqt, который импортирует VTK. Мне не повезло заставить py2exe, pyinstaller cx_freeze и т. д. работать с ним... Я получаю сообщение об ошибке, говорящее что-то вроде следующего, используя pyinstaller:

vtk.__helper.LinkError: No module named vtkFilteringPythonSIP

Мне удалось создать рабочие исполняемые файлы, которые не содержат код vtk с помощью pyinstaller, поэтому в данный момент я склоняюсь к этому, но если кто-то может помочь мне написать код, который сделает это: http://www.vtk.org/Wiki/VTK/Examples/Python/Widgets/EmbedPyQt работа с кодом как экзешник то буду вечно благодарен, как ни делай. Я пытался добавить файлы, на которые он жалуется, в хуки pyinstaller, но все равно не повезло. Есть ли старая/разрабатываемая версия, в которой исправлена ​​эта ошибка? Не могу найти никаких решений на информационной супершоссе, хотя я нашел людей в той же лодке. Я использую последнюю версию Python (X, Y).


person Peter Greaves    schedule 17.02.2014    source источник


Ответы (2)


Если кто-то столкнется с такой же проблемой, мне удалось заставить мой код работать, выполнив следующие действия:

  • В папке ловушек pyinstaller переименуйте «hook-vtkpython.py» в «hook-vtk.py».

Затем я получил другую ошибку при запуске исполняемого файла, сгенерированного pyinstaller, о невозможности найти модуль с именем QtOpenGL. Это происходило внутри файла в папке vtk в пакетах сайта под названием __helper.py. Я просто закомментировал последние две строки, чтобы удалить его зубы.

Я также изменил свой код, чтобы вместо того, чтобы импортировать весь vtk, я просто импортировал нужные мне биты. Боюсь, не уверен, что только первый или оба эти шага были необходимы для решения проблемы, но они решили ее. Проблема возникла с Python (x, y) 2.7.5.1. Ваш пробег может отличаться.

person Peter Greaves    schedule 18.02.2014
comment
У меня была такая же проблема, кажется, что некоторые биты vtk не очень хорошо работают с PyInstaller. Я переименовал файл «hook-vtkpython.py» в «hook-vtk.py» и прокомментировал последние две строки в __helper.py. Этого было достаточно для меня. Тем не менее, я хотел бы потратить еще немного времени на анализ ошибки, это решение немного хакерское. - person user3770060; 11.01.2016
comment
Что такое папка крючки? Где мне это найти? - person sqp_125; 26.11.2019

У меня недостаточно представителей, чтобы комментировать, поэтому я просто отвечаю. Я хотел добавить, что даже в 2021 это жизнеспособное решение. Я попытался создать Qt-vtk-UI и потратил на это несколько часов. Благодаря Питеру Гривзу, переименование файла ловушки помогло мне.

Я использую виртуальную среду conda с Python 3.6.12, PyQt5 (5.12.2) и vtk 9.0.1. Запуск pyinstaller с установкой по умолчанию выдает такие ошибки, как vtk не имеет атрибута vtk.qt или vtkmodules.all не имеет атрибута vtkmodules.all.qt, который просматривается при импорте QVTKRenderWindowInteractor. Я пробовал использовать скрытый импорт, например здесь, но это само по себе не помогло. Комбинация с переименованием vtk-hook работает.

person Atd    schedule 10.06.2021