python - 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,它会打印。我不知道为什么这两个会有所不同。
谢谢
解决方案
问题最终成为我的 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 中持久化
推荐阅读
- android - 工作状态观察者始终处于排队状态
- php - 使用 PHP 访问 Windows 对象?
- react-native - 无法使用反应原生张量流测试 kaggle 数据集
- php - 在php中集成paypal payout rest API的过程是什么
- python-3.x - ModuleNotFoundError:没有名为“loglevels”的模块
- swift - 如何在 iOS (Swift) 中验证 AWS Appsync
- sql - 隔离级别 - SQL Server
- wpf - 两种方式绑定在 DataGridTextColumn WPF 上不起作用
- javascript - 单击时在rails中打开图像
- c# - .NET RegEx 用于替换 URL 中的语言代码