首页 > 解决方案 > python vtk 8.2.0 似乎有损坏的属性

问题描述

我正在与一群使用 Ubuntu 16.04 和运行 Anaconda 2019.03 的 Python 3.7.3 的人一起工作。对于一个新项目,我尝试使用 VTK,安装的版本是 8.2.0。从此处运行示例: https : //lorensen.github.io/VTKExamples/site/Python/IO/ReadSTL/ 产生错误“模块'vtk'没有属性'vtkSTLReader'”。在进一步调查中,vtk 模块只有 9 个功能和属性,缺少我习惯的所有功能和属性。

我搬到另一台机器上,我可以很容易地运行这个例子。那台机器是 ubuntu 20.04,Anaconda 安装了 python 3.65 和 VTK 8.1.1。我更新了蟒蛇

conda update conda
conda update --all

这导致 vtk 更新到 VTK 8.2.0 但是现在如果我只是运行一个简单的 python 代码

import vtk
vtk.

工作计算机也发生了同样的事情。键入时间段后的自动完成不再提供所有功能和属性的列表。并且尝试运行有效的旧代码会产生错误,即函数和属性在 vtk 中不可用。我从 conda 卸载了 vtk 并使用 pip 安装了最新的 VTK 版本 9.0.1 并且错误是相同的。更新 vtk 时是否存在 conda 未更新的依赖项?我测试的其他东西仍然有效,所以看起来 VTK 坏了。我查看了 vtk8.1.1 和 8.2.0 之间的 API 变化,虽然有一些变化并没有改变一些缺失的变化,比如 vtkRenderer() 或 vtkSTLReader()。

我能够回到 vtk8.1.1 并验证它是否有效,但我真的很想使用 vtk 8.2 或更高版本,因为有一群人在使用 python 3.7,让他们都回到 Python 3.65 是不切实际的这个。

我根据我读到的一篇文章来确定对 VTK >8.2 的需求,其中 python3.7 需要 vtk >8.2。

根据这篇文章,我还尝试安装 python-vtk7,但找不到适用于 ubuntu 16.04 的包。 使用 python3.8 和 Ubuntu 20.04 设置 VTK

我假设我与一些简单的东西不匹配,但不确定是什么。如果有人对我是否需要更新 conda 更新之外的其他内容有任何见解,我将不胜感激。

添加更多细节:我也尝试过 pip install python-vtk 。这将安装 python-vtk 0.1.0 并将 vtk 替换为版本 8.1.2 并具有相同的错误消息。回到 python 3.65 和 vtk 8.1.1 解决了这个问题,但我无法获得任何版本来使用 Python 3.7。

更新:我也通过 VTK 询问信息。
https://discourse.vtk.org/t/installing-vtk-8-2-for-python-3-7-3-no-attributes-available/3821/4

我在 vtk.py 文件中添加了一个调试命令。如果我从 spyder 中的编辑器调用 import vtk,则不会打印调试,但如果我从 spyder 中的控制台调用 import vtk,它会打印。我不知道为什么这两个会有所不同。

谢谢

标签: pythonvtk

解决方案


问题最终成为我的 openGL 支持。我有三台机器。一个正在运行显示问题的 VMWARE。一个正在运行显示问题的 VNC。一个是在本地运行 ubuntu(使用 GPU HW),效果很好。

我使用 VMWARE 运行,并且在 python 2.x 和早期版本的 VTK 上运行良好,但是当我转移到 Python 3x 和更高版本的 VTK 时,它坏了,因为它不支持正确版本的 OpenGL。看起来有几种不同的方法可以修复它,但在我的情况下,我使用的是使用 OpenGL 的 SW 实现来保证支持。这是最快的解决方案。另一种解决方案是使用虚拟 GL 驱动程序,该驱动程序利用硬件并且可能更快,我可能会在未来研究。

对于 OpenGL 的 SW 实现: sudo apt install llvm-dev # 确保支持 OPENGL3.2 的 SW 驱动程序 export LIBGL_ALWAYS_SOFTWARE=1 # 确保 vtk 使用 sw opengl 驱动程序:这需要从每个新终端调用,或者在 bashrc 中持久化


推荐阅读