使用PyCharm安装mayavi

       我是在docker容器里安装,里面的环境是python3,因此mayavi依赖的PyQT需要安装PyQT5,现在PyCharm的python package tool window里左上方的搜索栏里输入PyQt5然后点击右上方的Install安装包PyQt5,然后在搜索栏输入vtk 选择安装最新的9.2.2版,然后在搜索栏里输入mayavi,也选择latest版本进行安装,结果试了几次都失败,选择了mayavi低一点的几个版本试了也不行,每次都是类似下面segment fault的错误:

Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Collecting mayavi
  Using cached https://mirrors.aliyun.com/pypi/packages/8a/54/90dd60c62e685ee56bdfaa6a7af62b0c762568a962e3137fc954b4f845bc/mayavi-4.8.0.tar.gz (19.8 MB)
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Requirement already satisfied: apptools in /usr/local/lib/python3.6/site-packages (from mayavi) (5.2.0)
Requirement already satisfied: envisage in /usr/local/lib/python3.6/site-packages (from mayavi) (6.1.0)
Requirement already satisfied: numpy in /root/.local/lib/python3.6/site-packages (from mayavi) (1.19.5)
Requirement already satisfied: pyface>=6.1.1 in /usr/local/lib/python3.6/site-packages (from mayavi) (7.4.2)
Requirement already satisfied: pygments in /usr/local/lib/python3.6/site-packages (from mayavi) (2.12.0)
Requirement already satisfied: traits>=6.0.0 in /usr/local/lib64/python3.6/site-packages (from mayavi) (6.4.1)
Requirement already satisfied: traitsui>=7.0.0 in /usr/local/lib/python3.6/site-packages (from mayavi) (7.4.1)
Requirement already satisfied: vtk in /usr/local/lib64/python3.6/site-packages (from mayavi) (9.2.2)
Requirement already satisfied: importlib-resources>=1.1.0 in /usr/local/lib/python3.6/site-packages (from pyface>=6.1.1->mayavi) (5.4.0)
Requirement already satisfied: importlib-metadata>=3.6.0 in /usr/local/lib/python3.6/site-packages (from pyface>=6.1.1->mayavi) (4.8.3)
Requirement already satisfied: configobj in /usr/local/lib/python3.6/site-packages (from apptools->mayavi) (5.0.6)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/site-packages (from envisage->mayavi) (59.5.0)
Requirement already satisfied: wslink>=1.0.4 in /usr/local/lib/python3.6/site-packages (from vtk->mayavi) (1.8.2)
Requirement already satisfied: matplotlib>=2.0.0 in /usr/local/lib64/python3.6/site-packages (from vtk->mayavi) (3.3.4)
Requirement already satisfied: typing-extensions>=3.6.4 in /root/.local/lib/python3.6/site-packages (from importlib-metadata>=3.6.0->pyface>=6.1.1->mayavi) (4.1.1)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.6/site-packages (from importlib-metadata>=3.6.0->pyface>=6.1.1->mayavi) (3.6.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib64/python3.6/site-packages (from matplotlib>=2.0.0->vtk->mayavi) (1.2.0)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/site-packages (from matplotlib>=2.0.0->vtk->mayavi) (2.8.2)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/site-packages (from matplotlib>=2.0.0->vtk->mayavi) (0.11.0)
Requirement already satisfied: pillow>=6.2.0 in /root/.local/lib/python3.6/site-packages (from matplotlib>=2.0.0->vtk->mayavi) (8.4.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in /usr/local/lib/python3.6/site-packages (from matplotlib>=2.0.0->vtk->mayavi) (3.0.9)
Requirement already satisfied: aiohttp<4 in /usr/local/lib64/python3.6/site-packages (from wslink>=1.0.4->vtk->mayavi) (3.8.1)
Requirement already satisfied: six in /usr/local/lib/python3.6/site-packages (from configobj->apptools->mayavi) (1.16.0)
Requirement already satisfied: idna-ssl>=1.0 in /usr/local/lib/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (1.1.0)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib64/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (1.2.0)
Requirement already satisfied: asynctest==0.13.0 in /usr/local/lib/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (0.13.0)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (4.0.2)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (21.4.0)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (1.2.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib64/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (5.2.0)
Requirement already satisfied: charset-normalizer<3.0,>=2.0 in /usr/local/lib/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (2.0.12)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib64/python3.6/site-packages (from aiohttp<4->wslink>=1.0.4->vtk->mayavi) (1.7.2)
Requirement already satisfied: idna>=2.0 in /usr/local/lib/python3.6/site-packages (from idna-ssl>=1.0->aiohttp<4->wslink>=1.0.4->vtk->mayavi) (2.8)
Building wheels for collected packages: mayavi
  Building wheel for mayavi (setup.py): started
  Building wheel for mayavi (setup.py): finished with status 'error'
  Running setup.py clean for mayavi
Failed to build mayavi
Installing collected packages: mayavi
    Running setup.py install for mayavi: started
    Running setup.py install for mayavi: finished with status 'error'

  ERROR: Command errored out with exit status -11:
   command: /usr/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/setup.py'"'"'; __file__='"'"'/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-4s0oq87x
       cwd: /tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/
  Complete output (153 lines):
  running bdist_wheel
  running build
  ----------------------------------------------------------------------
  Deleting possibly old TVTK classes
  Building TVTK classes... vtkAnimationCue: Ignoring method: Get/SetDirection
  default: 1, range: None
  vtkContextDevice2D: Ignoring method: Get/SetViewportRect
  default: [225, 0, 37940736, 0], range: None
  vtkContextDevice2D: Ignoring method: Get/SetViewportSize
  default: [41, 0], range: None
  vtkEventDataForDevice: Ignoring method: Get/SetAction
  default: -1, range: None
  vtkEventDataForDevice: Ignoring method: Get/SetDevice
  default: -1, range: None
  vtkFXAAOptions: Ignoring method: Get/SetDebugOptionValue
  default: 0, range: None
  vtkIncrementalForceLayout: Ignoring method: Get/SetGravityPoint
  default: [200.0, 200.0], range: None
  vtkOpenGLBufferObject: Ignoring method: Get/SetType
  default: 0, range: None
  vtkOpenGLFXAAFilter: Ignoring method: Get/SetDebugOptionValue
  default: 0, range: None
  vtkRenderWidget: Ignoring method: Get/SetPosition
  default: [0, 0], range: None
  vtkRenderWidget: Ignoring method: Get/SetSize
  default: [300, 300], range: None
  vtkShader: Ignoring method: Get/SetType
  default: 3, range: None
  vtkVolumeTexture: Ignoring method: Get/SetPartitions
  default: [1, 1, 1], range: None
  vtkChartMatrix: Ignoring method: Get/SetFillStrategy
  default: 0, range: None
  vtkChartMatrix: Ignoring method: Get/SetGutter
  default: [15.0, 15.0], range: None
  vtkChartMatrix: Ignoring method: Get/SetRect
  default: [0, 0, 100, 100], range: None
  vtkChartMatrix: Ignoring method: Get/SetSize
  default: [0, 0], range: None
  vtkContextArea: Ignoring method: Get/SetDrawAreaBounds
  default: [0.0, 0.0, 300.0, 300.0], range: None
  vtkContextArea: Ignoring method: Get/SetDrawAreaResizeBehavior
  default: 0, range: None
  vtkContextArea: Ignoring method: Get/SetFixedMargins
  default: [0, 0, 0, 0], range: None
  vtkContextArea: Ignoring method: Get/SetFixedRect
  default: [0, 0, 300, 300], range: None
  vtkContextArea: Ignoring method: Get/SetGeometry
  default: [0, 0, 300, 300], range: None
  vtkImplicitProjectOnPlaneDistance: Ignoring method: Get/SetNorm
  default: 2, range: None
  vtkOpenGLVertexBufferObject: Ignoring method: Get/SetCoordShiftAndScaleMethod
  default: 0, range: None
  vtkSimple3DCirclesStrategy: Ignoring method: Get/SetMarkedValue
  default: (invalid), range: None
  vtkArrayNorm: Ignoring method: Get/SetWindow
  default: [0, 9223372036854775807), range: None
  vtkChart: Ignoring method: Get/SetSize
  default: [0.0, 0.0, 0.0, 0.0], range: None
  vtkChartXYZ: Ignoring method: Get/SetAxisColor
  default: [0, 0, 0, 255], range: None
  vtkEuclideanClusterExtraction: Radius not updatable (VTK 9.1 bug - value not properly initialized)
  Warning: We cannot determine the trait type of vtkHigherOrderHexahedron.Order
  Warning: We cannot determine the trait type of vtkHigherOrderQuadrilateral.Order
  Warning: We cannot determine the trait type of vtkHigherOrderWedge.Order
  vtkHyperTreeGridPreConfiguredSource: Ignoring method: Get/SetCustomArchitecture
  default: 0, range: None
  vtkHyperTreeGridPreConfiguredSource: Ignoring method: Get/SetHTGMode
  default: 0, range: None
  vtkLightingMapPass: Ignoring method: Get/SetRenderType
  default: 0, range: None
  vtkPlot: Ignoring method: Get/SetShiftScale
  default: [0.0, 0.0, 1.0, 1.0], range: None
  vtkScatterPlotMatrix: Ignoring method: Get/SetActivePlot
  default: [0, -2], range: None
  vtkScatterPlotMatrix: Ignoring method: Get/SetScatterPlotSelectedActiveColor
  default: [0, 204, 0, 102], range: None
  vtkScatterPlotMatrix: Ignoring method: Get/SetScatterPlotSelectedRowColumnColor
  default: [204, 0, 0, 102], range: None
  vtkScatterPlotMatrix: Ignoring method: Get/SetSize
  default: [0, 0], range: None
  vtkSparseArray_I10vtkVariantE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_I10vtkVariantE: Ignoring method: Get/SetNullValue
  default: (invalid), range: None
  vtkSparseArray_I12vtkStdStringE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IaE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IcE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IdE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IfE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IhE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IiE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IjE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IlE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_ImE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IsE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_ItE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IxE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkSparseArray_IyE: Ignoring method: Get/SetExtents
  default: , range: None
  vtkThresholdTable: Ignoring method: Get/SetMaxValue
  default: 2147483647, range: None
  vtkThresholdTable: Ignoring method: Get/SetMinValue
  default: 0, range: None
  vtkTransferAttributes: Ignoring method: Get/SetDefaultValue
  default: 1, range: None
  Bad to call vtkUniformHyperTreeGrid::GetXCoordinates
  Bad to call vtkUniformHyperTreeGrid::GetYCoordinates
  Bad to call vtkUniformHyperTreeGrid::GetZCoordinates
  vtkChartBox: Ignoring method: Get/SetSize
  default: [0.0, 0.0, 0.0, 0.0], range: None
  vtkColorLegend: Ignoring method: Get/SetPosition
  default: [0.0, 0.0, 0.0, 0.0], range: None
  Warning: We cannot determine the trait type of vtkImageMask.MaskedOutputValue
  vtkMolecule: Ignoring method: Get/SetLatticeOrigin
  default: [0.0, 0.0, 0.0], range: None
  vtkPOpenFOAMReader: Ignoring method: Get/SetCaseType
  default: 1, range: None
  Fatal Python error: Segmentation fault
  
  Current thread 0x00007f39ab5c0740 (most recent call first):
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/tvtk/vtk_parser.py", line 705 in _find_get_set_methods
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/tvtk/vtk_parser.py", line 488 in _organize_methods
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/tvtk/vtk_parser.py", line 154 in parse
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/tvtk/wrapper_gen.py", line 341 in _gen_methods
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/tvtk/wrapper_gen.py", line 242 in generate_code
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/tvtk/code_gen.py", line 235 in _write_wrapper_class
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/tvtk/code_gen.py", line 142 in generate_code
    File "tvtk/setup.py", line 98 in gen_tvtk_classes_zip
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/setup.py", line 254 in build_tvtk_classes_zip
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/setup.py", line 268 in run
    File "/usr/lib64/python3.6/distutils/dist.py", line 974 in run_command
    File "/usr/lib64/python3.6/distutils/cmd.py", line 313 in run_command
    File "/usr/local/lib/python3.6/site-packages/wheel/bdist_wheel.py", line 299 in run
    File "/usr/lib64/python3.6/distutils/dist.py", line 974 in run_command
    File "/usr/lib64/python3.6/distutils/dist.py", line 955 in run_commands
    File "/usr/lib64/python3.6/distutils/core.py", line 148 in setup
    File "/usr/local/lib/python3.6/site-packages/setuptools/__init__.py", line 153 in setup
    File "/root/.local/lib/python3.6/site-packages/numpy/distutils/core.py", line 169 in setup
    File "/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/setup.py", line 464 in <module>
    File "<string>", line 1 in <module>

    ----------------------------------------
ERROR: Command errored out with exit status -11: /usr/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/setup.py'"'"'; __file__='"'"'/tmp/pip-install-9iiorris/mayavi_ce17df6e474c44e9bd05d7c328bb7e02/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-bnbwj46a/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/mayavi Check the logs for full command output.

看了一下网上别人在windows里安装时好像都是使用的比较低版本的vtk,于是我实验了一些低一点版本的vtk,再来组合低一点版本的mayavi,结果发现 vtk 8.1.2  +  mayavi 4.8.0是可以成功安装的,vtk 8.2 + mayavi 4.7.3也可以,反正多试一下找个自己觉得版本算高的就行了。

如果是安装在host上,应该可以用了,如果是安装在docker容器内,运行利用mayavi进行点云可视化之类的程序时很可能还是QT会报错,在~/.bashrc里增加export QT_DEBUG_PLUGINS=1并用source ~/.bashrc生效,再运行程序让QT报出详细错误:

Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforms" ...
Cannot load library /usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so: (libxcb-icccm.so.4: cannot open shared object file: No such file or directory)
QLibraryPrivate::loadPlugin failed on "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so" : "Cannot load library /usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so: (libxcb-icccm.so.4: cannot open shared object file: No such file or directory)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

Aborted (core dumped)

类似这样的文件不存在的问题好说,安装就是,用ldd命令查看还缺哪些文件:

ldd /usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so

    libxcb-icccm.so.4 => not found
    libxcb-image.so.0 => not found
    *libxcb-util.so.1 => not found
    libxcb-keysyms.so.1 => not found
    libxcb-render-util.so.0 => not found
    libxkbcommon-x11.so.0 => not found

如果你直接安装指定具体版本号后缀了的文件yum install libxcb-icccm.so.4,会导致运行时又这样报错:

Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforms" ...
Cannot load library /usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so: (libxcb-icccm.so.4: wrong ELF class: ELFCLASS32)
QLibraryPrivate::loadPlugin failed on "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so" : "Cannot load library /usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so: (libxcb-icccm.so.4: wrong ELF class: ELFCLASS32)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

Aborted (core dumped)

这种wrong ELF class: ELFCLASS32错误表示安装的32位的文件,但是程序需要的是64位的文件,所以需要使用类似这样的命令来选择安装x86_64版的文件:

yum install libxcb-icccm* libxcb-image* libxcb-keysyms* libxcb-render-util* libxkbcommon-x11*

(注意,在不同的docker环境里缺的文件可能有不同,看具体报错情况)

把上面缺的6个文件都安装了后,再运行程序可能又会报这样的错误:

Got keys from plugin meta data ("webp")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/imageformats" ...
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqgif.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqicns.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqico.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqjpeg.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqsvg.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqtga.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqtiff.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqwbmp.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqwebp.so"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/accessiblebridge" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/accessiblebridge" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/accessible" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/accessible" ...
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast

ERROR: In /work/standalone-x64-build/VTK-source/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 785
vtkXOpenGLRenderWindow (0x491d930): GLEW could not be initialized.
Segmentation fault (core dumped)

这种错误是当前的容器类没有mesa驱动,用下面的命令安装:

#Centos
yum install mesa*
yum install glut

#Ubuntu
sudo apt install mesa-common-dev freeglut3-dev libglfw3-dev libgles2-mesa-dev libglew-dev

再运行程序又报错:

Got keys from plugin meta data ("webp")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/imageformats" ...
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqgif.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqicns.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqico.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqjpeg.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqsvg.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqtga.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqtiff.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqwbmp.so"
loaded library "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/imageformats/libqwebp.so"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/accessiblebridge" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/accessiblebridge" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/local/lib64/python3.6/site-packages/PyQt5/Qt5/plugins/accessible" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/accessible" ...
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
ERROR: In /work/standalone-x64-build/VTK-source/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 785
vtkXOpenGLRenderWindow (0x6002f30): GLEW could not be initialized.

Segmentation fault (core dumped)
这是因为当前的容器内没有opengl驱动,一种办法是创建容器是把Host上的cuda和opengl驱动所在目录映射进入容器对应的路径,参见[docker][mayavi] libGL error: No matching fbConfigs or visuals found · Issue #1 · SoonminHwang/dockers · GitHub

另一种是到Docker Hub上选取合适版本的cudgl镜像后直接拉取cudagl镜像来创建容器,例如:

sudo docker pull nvidia/cudagl:11.4.2-devel-ubuntu18.04

我选择后者,后者比较简单,第一种方法比较麻烦。

拉取nvida/cudagl docker image后创建容器:

sudo nvidia-docker run -itd --privileged --pid host --network host --ipc host --name "lddata-nvidia-cudagl-11.4.2-devel" \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw -v /var/run/dbus:/var/run/dbus --device=/dev/dri:/dev/dri -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 \
-v /home/fychen/workspace:/workspace nvidia/cudagl:11.4.2-devel-ubuntu18.04 /bin/bash

然后安装python3和pip以及这个镜像里缺少的支持包libsm6,并设置aliyun为pip服务器镜像:

apt-get update
apt-get install python3 python3-pip libsm6
pip3 install --upgrade pip

pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple/
pip3 config set install.trusted-host mirrors.aliyun.com

再安装mayavi及其所需相关支持包:

pip install numpy==1.19.5 vtk==8.1.2 mayavi==4.8.0 PyQt5 torch==1.9.1

到此,环境安装就完成了!运行调研mayavi将点云可视化的程序即可看到点云图了:

python3 points_visual.py

后面发现的和qt5 xcb插件相关的崩溃错误也记录到这里:

某天安装和使用labelme之类的其他软件时涉及到QT5 xcb插件so可以加载但是崩溃,有如下错误信息:

QFactoryLoader::QFactoryLoader() looking at "/usr/local/lib/python3.6/dist-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so"
Found metadata in lib /usr/local/lib/python3.6/dist-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so, metadata=
{
    "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
    "MetaData": {
        "Keys": [
            "xcb"
        ]
    },
    "archreq": 0,
    "className": "QXcbIntegrationPlugin",
    "debug": false,
    "version": 331520
}


Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforms" ...
loaded library "/home/fy/.local/lib/python3.6/site-packages/cv2/qt/plugins/platforms/libqxcb.so"
QObject::moveToThread: Current thread (0x1841860) is not the object's thread (0x2115100).
Cannot move to target thread (0x1841860)

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/fy/.local/lib/python3.6/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl.

已放弃 (核心已转储)

仔细看上面的输出信息,错误的原因其实很清楚了,QT5下有个libqxcb.so,同时python版opencv的cv2/qt/目录下也有个libqxcb.so,两个文件的版本不同,这样会导致程序运行过程中调用错误的堆栈而崩溃,把cv2下的qt目录改个名字即可

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值