Mayavi: 3D ν”Œλ‘―μ˜ μŠ€ν¬λ¦°μƒ· μ‹œ μ„Έκ·Έλ¨ΌνŠΈ 였λ₯˜

에 λ§Œλ“  2018λ…„ 09μ›” 05일  Β·  7μ½”λ©˜νŠΈ  Β·  좜처: enthought/mayavi

이 파일: minimum_example_fail.py:

import faulthandler
faulthandler.enable()

from mayavi import mlab
mlab.test_plot3d()
mlab.screenshot()

λ‹€μŒ μŠ€νƒμ—μ„œ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

$ python minimal_example_fail.py 
Fatal Python error: Segmentation fault

Current thread 0x00007f2c3107e740 (most recent call first):
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/tvtk/tvtk_base.py", line 568 in _wrap_call
  File "tvtk_classes/open_gl_render_window.py", line 79 in get_pixel_data
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/mayavi/tools/figure.py", line 348 in screenshot
  File "minimal_example_fail.py", line 15 in <module>
Segmentation fault (core dumped)

μž¬ν˜„ν•˜λ €λ©΄:

$ conda deactivate
$ conda create -n test python=3.6 numpy "pyqt>=5" matplotlib traits pyface traitsui
$ conda activate test
$ pip install vtk
$ pip install mayavi
$ python minimal_example_fail.py

@larsoner @agramfort

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이 μˆ˜μ •μœΌλ‘œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

from pyface.api import GUI
from mayavi import mlab
mlab.test_plot3d()
GUI().process_events()
mlab.screenshot()

λ˜λŠ” μ‰˜ 원 λΌμ΄λ„ˆ:

python -c "from pyface.api import GUI; from mayavi import mlab; mlab.test_plot3d(); GUI().process_events(); mlab.screenshot()"

기본적으둜 λ¬Έμ œλŠ” 이벀트 루프가 μ‹œμž‘λ˜μ§€ μ•Šμ•„ μŠ€ν¬λ¦°μƒ·μ„ μ‹œλ„ν•  λ•Œ μ‹œμŠ€ν…œμ΄ μ™„μ „νžˆ λ Œλ”λ§λ˜μ§€ μ•Šμ€ μƒνƒœμ— μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μš°λ¦¬λŠ” 이 μž‘μ€ GUI 트릭으둜 λ Œλ”λ§μ„ κ°•μ œν•¨μœΌλ‘œμ¨ PySurferμ—μ„œ 이 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

@prabhuramachandran 이 이것이 문제λ₯Ό ν•΄κ²°ν•œλ‹€κ³  κ°€μ •ν•˜λ©΄ μŠ€ν¬λ¦°μƒ·μ„ μ‹œλ„ν•˜κΈ° 전에 OpenGL μ»¨ν…μŠ€νŠΈ(λ˜λŠ” λ‹€λ₯Έ 것)κ°€ μ‹€μ œλ‘œ μœ νš¨ν•œμ§€ ν™•μΈν•˜λŠ” 방법이 μžˆμ„ 수 있으며 그렇지 μ•Šμ€ 경우 이 트릭/해킹을 μ‚¬μš©ν•˜μ—¬ 이벀트λ₯Ό μ²˜λ¦¬ν•˜μ—¬ λ‹€μŒμ΄ λ˜λ„λ‘ ν•©λ‹ˆλ‹€. μœ νš¨ν•œ. μ•½κ°„ μ—‰λš±ν•œ/λ„ˆλ¬΄ ν•΄ν‚€ν•΄ 보이기 λ•Œλ¬Έμ— κ°€μΉ˜κ°€ 없을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  7 λŒ“κΈ€

λ‚˜λŠ” 이것을 μž¬ν˜„ν•  수 μ—†μ§€λ§Œ λ‚΄κ°€ λΆ€λ”ͺμΉ˜λŠ” 또 λ‹€λ₯Έ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” μ°½ 크기가 0μ΄λΌλŠ” κ²ƒμž…λ‹ˆλ‹€. 메인 루프가 μ‹€ν–‰λ˜κ³  μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 이것은 μ‹€μ œλ‘œ Qt λ¬Έμ œμž…λ‹ˆλ‹€. %gui qt 둜 IPython μ„Έμ…˜μ—μ„œ 이것을 μ‹œλ„ν•˜κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆκΉŒ?

이게 λ‹ˆκ°€ν•˜λ €κ³ ν–ˆλ˜ κ±° λ§žμ•„?

$ ipython 
Python 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 17:14:51) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: %gui qt

In [2]: %run ./minimal_example_fail.py
Qt WebEngine seems to be initialized from a plugin. Please set Qt::AA_ShareOpenGLContexts using QCoreApplication::setAttribute before constructing QGuiApplication.
Fatal Python error: Segmentation fault

Thread 0x00007fb7eef88700 (most recent call first):
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 295 in wait
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 551 in wait
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/history.py", line 829 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/history.py", line 58 in needs_sqlite
  File "<decorator-gen-24>", line 2 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 916 in _bootstrap_inner
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 884 in _bootstrap

Current thread 0x00007fb7f5710740 (most recent call first):
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/tvtk/tvtk_base.py", line 568 in _wrap_call
  File "tvtk_classes/open_gl_render_window.py", line 79 in get_pixel_data
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/mayavi/tools/figure.py", line 348 in screenshot
  File "/home/maximilien.chaumon/owncloud/Lab/Projects/CTPS/code/minimal_example_fail.py", line 15 in <module>
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/utils/py3compat.py", line 188 in execfile
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2527 in safe_execfile
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/magics/execution.py", line 761 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/magics/execution.py", line 775 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/magic.py", line 187 in <lambda>
  File "<decorator-gen-60>", line 2 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2131 in run_line_magic
  File "<ipython-input-2-f514c016d8ee>", line 1 in <module>
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2963 in run_code
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2909 in run_ast_nodes
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2785 in _run_cell
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2662 in run_cell
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/terminal/interactiveshell.py", line 476 in interact
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/terminal/interactiveshell.py", line 485 in mainloop
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/terminal/ipapp.py", line 356 in start
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/traitlets/config/application.py", line 658 in launch_instance
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/__init__.py", line 125 in start_ipython
  File "/home/maximilien.chaumon/anaconda3/envs/mne/bin/ipython", line 11 in <module>
Segmentation fault (core dumped)

VTK-8.1.1(pipμ—μ„œ), Python 3.6.0, mayavi master, pyqt5 5.10.1을 μ‚¬μš©ν•˜μ—¬ μš°λΆ„νˆ¬ μ‹œμŠ€ν…œμ—μ„œ 이것을 μ‹œλ„ν–ˆλŠ”λ° 였λ₯˜κ°€ λ°œμƒν•˜μ§€λ§Œ segfaultλŠ” λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 보고 μžˆλŠ” 였λ₯˜λŠ” UI νˆ΄ν‚·μ΄ μ‹€ν–‰λ˜μ§€ μ•ŠμœΌλ©΄ 창이 열리지 μ•Šμ•„ ν™”λ©΄ 크기가 μ—¬μ „νžˆ 0μ΄μ§€λ§Œ segfaultκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 더 κΉŠμ€ 문제둜 μΈν•œ κ²ƒμž…λ‹ˆλ‹€. 크기가 0인 λ‹€λ₯Έ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ…Έλ ₯ν•˜κ² μ§€λ§Œ λΆˆν–‰νžˆλ„ κ·€ν•˜μ˜ segfaultλ₯Ό μž¬ν˜„ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

OSX 및 Linux μ‹œμŠ€ν…œ segfault 였λ₯˜λŠ” μ•„λ‹ˆμ§€λ§Œ μœ μ‚¬ν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 였λ₯˜λ₯Ό μΌμœΌν‚€λŠ” 잠재적인 mayavi μ»€λ°‹μœΌλ‘œ λ²”μœ„λ₯Ό 쒁힐 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0은 첫 번째 잘λͺ»λœ μ»€λ°‹μž…λ‹ˆλ‹€.
컀밋 fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0
μ €μž: Prabhu Ramachandran [email protected]
λ‚ μ§œ: 2018λ…„ 8μ›” 3일 κΈˆμš”μΌ 21:38:13 -0400

Modify module manager to work with composite data.

This uses the dataset_adapter code from VTK and requires VTK >= 6.3.

M λ§ˆμ•ΌλΉ„

@dnacombo μ—μ„œ μ΅œμ†Œν•œμœΌλ‘œ μž¬ν˜„ν•  수 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
μ΅œμ†Œν•œμ˜ 예제λ₯Ό μ‚¬μš©ν•˜μ—¬ μž¬ν˜„ν•  수 μžˆμ§€λ§Œ λ‚΄ Linux μƒμžμ—μ„œλ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

ν”Œλž«νΌ: Linux-4.15.0-34-generic-x86_64-with-debian-buster-sid
파이썬: 3.6.6 |μ•„λ‚˜μ½˜λ‹€, Inc.| (κΈ°λ³Έκ°’, 2018λ…„ 6μ›” 28일, 17:14:51) [GCC 7.2.0]
μ‹€ν–‰ 파일: /home/ktavabi/miniconda3/envs/mne/bin/python
CPU: x86_64: 24μ½”μ–΄
λ©”λͺ¨λ¦¬: 94.4GB

mne: 0.17.dev0
numpy: 1.15.1 {blas=mkl_rt, lapack=mkl_rt}
사이피: 1.1.0
matplotlib: 2.2.2 {λ°±μ—”λ“œ=Qt5Agg}

슀켈런: 0.19.2
λ‹ˆλ°”λ²¨: 2.4.0dev
λ§ˆμ•ΌλΉ„: 4.7.0.dev0 4.6.0 {qt_api=pyqt5}
cupy: 찾을 수 μ—†μŒ
νŒ¬λ”: 0.23.4
dipy: 0.15.0dev
vtk: 8.1.1

λ‚΄ OSX μ»΄ν“¨ν„°μ—μ„œ λ‹€λ₯Έ 였λ₯˜κ°€ λ°œμƒν•˜μ§€λ§Œ segfaultλŠ” λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ‹€λ₯Έ μ»΄ν“¨ν„°μ—μ„œ μœ μ‚¬/λ™μΌν•œ segfault 였λ₯˜κ°€ λ°œμƒν–ˆμ§€λ§Œ λ‹€μŒ μ‚¬μ–‘μ˜ 맀우 μœ μ‚¬ν•œ 18.04 λΉŒλ“œ:

ν”Œλž«νΌ: Linux-4.15.0-36-generic-x86_64-with-debian-buster-sid
파이썬: 3.6.6 |μ•„λ‚˜μ½˜λ‹€, Inc.| (κΈ°λ³Έκ°’, 2018λ…„ 6μ›” 28일, 17:14:51) [GCC 7.2.0]
μ‹€ν–‰ 파일: /home/nordme/miniconda3/envs/mne/bin/python
CPU: x86_64: 12μ½”μ–΄
λ©”λͺ¨λ¦¬: 15.5GB

mne: 0.17.dev0
numpy: 1.15.2 {blas=mkl_rt, lapack=mkl_rt}
사이피: 1.1.0
matplotlib: 2.2.2 {λ°±μ—”λ“œ=Qt5Agg}

sklearn: 0.20.0
λ‹ˆλ°”λ²¨: 2.3.0
λ§ˆμ•ΌλΉ„: 4.7.0.dev0 {qt_api=pyqt5}
cupy: 찾을 수 μ—†μŒ
νŒ¬λ”: 0.23.4
λ””ν”Ό: 0.14.0

a19c710c3f61389d79ed05271584e44f9744f6bc 4.6.0 릴리슀둜 μ „ν™˜ν•˜λ©΄ 였λ₯˜κ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 좔적을 보렀면 LMK.

이 μˆ˜μ •μœΌλ‘œ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

from pyface.api import GUI
from mayavi import mlab
mlab.test_plot3d()
GUI().process_events()
mlab.screenshot()

λ˜λŠ” μ‰˜ 원 λΌμ΄λ„ˆ:

python -c "from pyface.api import GUI; from mayavi import mlab; mlab.test_plot3d(); GUI().process_events(); mlab.screenshot()"

기본적으둜 λ¬Έμ œλŠ” 이벀트 루프가 μ‹œμž‘λ˜μ§€ μ•Šμ•„ μŠ€ν¬λ¦°μƒ·μ„ μ‹œλ„ν•  λ•Œ μ‹œμŠ€ν…œμ΄ μ™„μ „νžˆ λ Œλ”λ§λ˜μ§€ μ•Šμ€ μƒνƒœμ— μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μš°λ¦¬λŠ” 이 μž‘μ€ GUI 트릭으둜 λ Œλ”λ§μ„ κ°•μ œν•¨μœΌλ‘œμ¨ PySurferμ—μ„œ 이 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

@prabhuramachandran 이 이것이 문제λ₯Ό ν•΄κ²°ν•œλ‹€κ³  κ°€μ •ν•˜λ©΄ μŠ€ν¬λ¦°μƒ·μ„ μ‹œλ„ν•˜κΈ° 전에 OpenGL μ»¨ν…μŠ€νŠΈ(λ˜λŠ” λ‹€λ₯Έ 것)κ°€ μ‹€μ œλ‘œ μœ νš¨ν•œμ§€ ν™•μΈν•˜λŠ” 방법이 μžˆμ„ 수 있으며 그렇지 μ•Šμ€ 경우 이 트릭/해킹을 μ‚¬μš©ν•˜μ—¬ 이벀트λ₯Ό μ²˜λ¦¬ν•˜μ—¬ λ‹€μŒμ΄ λ˜λ„λ‘ ν•©λ‹ˆλ‹€. μœ νš¨ν•œ. μ•½κ°„ μ—‰λš±ν•œ/λ„ˆλ¬΄ ν•΄ν‚€ν•΄ 보이기 λ•Œλ¬Έμ— κ°€μΉ˜κ°€ 없을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

@larsoner -- 예, λ‚˜λŠ” 같은 것을 μƒκ°ν–ˆκ³ (이전 의견 μ°Έμ‘°) μ–΄λŠ μ‹œμ μ—μ„œ mlabμ—μ„œ κΉ¨λ—ν•˜κ²Œ μˆ˜μ •ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ–΄λŠ μ‹œμ μ—μ„œ 그것에 λ„λ‹¬ν•˜κΈ°λ₯Ό 바라고 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ v 4.6.1λΆ€ν„° mlabμ—λŠ” μ‚¬μš©μžκ°€ GUI 등을 κ°€μ Έμ˜¬ ν•„μš” 없이 ν”„λ‘œμ„ΈμŠ€ 이벀트λ₯Ό ν˜ΈμΆœν•˜λŠ” process_ui_events κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€. (http://docs.enthought.com/mayavi/mayavi/auto/changes .html#id10).

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰