【问题标题】:Python executable with VTK... pyinstaller, py2exe, cx_freeze etc带有 VTK 的 Python 可执行文件... pyinstaller、py2exe、cx_freeze 等
【发布时间】:2014-03-17 03:34:08
【问题描述】:

我使用 pyqt 在 python 中构建了一个 gui,它可以导入 VTK。我没有任何运气让 py2exe、pyinstaller cx_freeze 等与它一起工作...我收到一个错误,使用 pyinstaller 说明以下内容:

vtk.__helper.LinkError: No module named vtkFilteringPythonSIP

我已经设法使用 pyinstaller 制作了不包含 vtk 代码的工作可执行文件,所以我目前倾向于这样做,但如果有人可以帮助我编写代码来实现这一点:http://www.vtk.org/Wiki/VTK/Examples/Python/Widgets/EmbedPyQt 代码作为可执行,那么我将永远感激不尽,但它已经完成了。我已经尝试将它抱怨的文件添加到 pyinstaller 挂钩,但仍然没有运气。是否有修复此错误的旧/开发版本?在信息高速公路上找不到任何解决方案,尽管我已经找到了同舟共济的人。我正在使用最新版本的 Python (X,Y)。

【问题讨论】:

    标签: python pyqt py2exe vtk pyinstaller


    【解决方案1】:

    如果有人在遇到同样的问题时偶然发现了这个问题,我可以通过执行以下操作来让我的代码正常工作:

    • 在 pyinstaller hooks 文件夹中,将“hook-vtkpython.py”重命名为“hook-vtk.py”

    然后我在运行 pyinstaller 生成的可执行文件时遇到了另一个错误,即找不到名为 QtOpenGL 的模块。这发生在站点包中 vtk 文件夹中名为 __helper.py 的文件中。我只是将最后两行注释掉以去除它的牙齿。

    我还更改了我的代码,因此我只导入了我需要的位,而不是导入所有 vtk。不确定是否只需要第一步或这两个步骤来解决我担心的问题,但他们/它确实解决了它。问题发生在 Python (x,y) 2.7.5.1 上。您的里程可能会有所不同。

    【讨论】:

    • 我遇到了同样的问题,似乎某些 vtk 位在 PyInstaller 中不能很好地工作。我将 'hook-vtkpython.py' 文件重命名为 'hook-vtk.py' 并注释了 __helper.py 中的最后两行。这对我来说已经足够了。尽管如此,我还是想花更多时间分析错误,这个解决方案有点hacky。
    • 什么是 hooks 文件夹?我在哪里可以找到它?
    【解决方案2】:

    我没有足够的代表发表评论,所以我只是回应。我想补充一点,仍然是 2021,这是一个可行的解决方案。 我尝试构建一个 Qt-vtk-UI 并努力构建它几个小时。感谢 Peter Greaves,重命名挂钩文件为我解决了问题。

    我正在使用带有 Python 3.6.12、PyQt5 (5.12.2) 和 vtk 9.0.1 的虚拟 conda 环境。使用默认安装运行 pyinstaller 会引发错误,例如“vtk has no attribute vtk.qt”或“vtkmodules.all has no attribute vtkmodules.all.qt”,在导入 QVTKRenderWindowInteractor 时会查找这些错误。 我尝试使用 here 之类的隐藏导入,但仅此一项并不能解决问题。与重命名 vtk-hook 的组合有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2016-11-01
      • 2014-12-22
      • 2013-07-06
      • 1970-01-01
      相关资源
      最近更新 更多