このファイル:minimal_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
これを再現することはできませんが、別の問題が発生します。 問題は、ウィンドウのサイズがゼロであるということです。 メインループが実行されていないため、これは実際には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)
UbuntuマシンでVTK-8.1.1(pipから)、Python 3.6.0、mayavi master、pyqt5 5.10.1を使用してこれを試しましたが、エラーが発生しましたが、セグメンテーション違反は発生しませんでした。 私が見ているエラーは、UIツールキットが実行されていない場合、ウィンドウが開いていないため、画面サイズがゼロのままであるというより深い問題が原因ですが、これはセグメンテーション違反ではありません。 サイズがゼロの別の問題の解決に取り組みますが、残念ながら、セグメンテーション違反を再現できません。
OSXマシン両方で、同じではないにしても同様のセグメンテーション違反エラーが発生しました。 エラーの原因となる可能性のあるmayavi
コミットに絞り込むことができました。
fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0は最初の悪いコミットです
コミットfd9a515a9563d81a42b84514c1fb4ce5f81ac9a0
著者:プラブー・ラマチャンドラン
日付:2018年8月3日金曜日21:38:13 -0400Modify module manager to work with composite data. This uses the dataset_adapter code from VTK and requires VTK >= 6.3.
:04000004000088baad8a26a7fc9d06fc95979441b4cd436e26962eca99efb8a7de37c75d3113fe194c16403b269d M mayavi
@dnacomboから最小限で再現できるかどうかを確認します
最小限の例を使用して再現できますが、Linuxボックスでのみ再現できます。
プラットフォーム:Linux-4.15.0-34-generic-x86_64-with-debian-buster-sid
Python:3.6.6 | Anaconda、Inc。| (デフォルト、2018年6月28日、17:14:51)[GCC 7.2.0]
実行可能ファイル:/ home / ktavabi / miniconda3 / envs / mne / bin / python
CPU:x86_64:24コア
メモリ:94.4 GBmne:0.17.dev0
numpy:1.15.1 {blas = mkl_rt、lapack = mkl_rt}
scipy:1.1.0
matplotlib:2.2.2 {backend = Qt5Agg}sklearn:0.19.2
ニバベル:2.4.0dev
mayavi:4.7.0.dev04.6.0{qt_api = pyqt5}
キューピー:見つかりません
パンダ:0.23.4
dipy:0.15.0dev
vtk:8.1.1
OSXマシンでは、さまざまなエラーが発生しますが、セグメンテーション違反は発生しません。
別のマシンで同様の/同じセグメンテーション違反エラーが発生しましたが、次の仕様で非常に類似した18.04
ビルドが発生しました。
プラットフォーム:Linux-4.15.0-36-generic-x86_64-with-debian-buster-sid
Python:3.6.6 | Anaconda、Inc。| (デフォルト、2018年6月28日、17:14:51)[GCC 7.2.0]
実行可能ファイル:/ home / nordme / miniconda3 / envs / mne / bin / python
CPU:x86_64:12コア
メモリ:15.5 GBmne:0.17.dev0
numpy:1.15.2 {blas = mkl_rt、lapack = mkl_rt}
scipy:1.1.0
matplotlib:2.2.2 {backend = Qt5Agg}sklearn:0.20.0
ニバベル:2.3.0
mayavi:4.7.0.dev0 {qt_api = pyqt5}
キューピー:見つかりません
パンダ:0.23.4
dipy: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にはprocess_ui_events
関数があり、ユーザーがGUIなどをインポートしなくてもプロセスイベントを呼び出すことができます(http://docs.enthought.com/mayavi/mayavi/auto/changes .html#id10)。
最も参考になるコメント
この変更で問題が修正されたことを確認できますか?
またはシェルワンライナー:
基本的に、問題はイベントループが開始されていないことであると思われます。そのため、スクリーンショットを試行すると、システムは完全にレンダリングされていない状態になります。
この小さな
GUI
トリックでレンダリングを強制することにより、PySurferでこれを回避します。@prabhuramachandranこれで問題が解決すると仮定すると、スクリーンショットを試す前にOpenGLコンテックス(または他の何か)が実際に有効かどうかを確認する方法がある可能性があります。そうでない場合は、このトリック/ハックを使用してイベントを処理し、次のようにします。有効。 少し気難しい/ハッキーすぎるようですが、それだけの価値はないかもしれません。