Этот файл: 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, поскольку основной цикл не работает. Можете ли вы попробовать это в сеансе IPython с %gui qt
и посмотреть?
Это то, что вы имеете в виду?
$ 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, и я получаю сообщение об ошибке, но без segfault. Ошибка, которую я вижу, связана с более глубокой проблемой, заключающейся в том, что без запущенного инструментария пользовательского интерфейса нет открытого окна, поэтому размер экрана по-прежнему равен нулю, но это не ошибка. Я буду работать над решением другой проблемы с нулевым размером, но, к сожалению, я не могу воспроизвести ваш segfault.
Я столкнулся с похожей, если не с той же ошибкой segfault на машинах OSX и Linux. Мне удалось сузить его до потенциального коммита mayavi
вызывающего ошибку.
fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0 - первая плохая фиксация
совершить fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0
Автор: Прабху Рамачандран [email protected]
Дата: Пт 3 августа 21:38:13 2018 -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. | (по умолчанию, 28 июня 2018 г., 17:14:51) [GCC 7.2.0]
Исполняемый файл: / home / ktavabi / miniconda3 / envs / mne / bin / python
Процессор: x86_64: 24 ядра
Память: 94,4 ГБmne: 0.17.dev0
число: 1.15.1 {blas = mkl_rt, lapack = mkl_rt}
scipy: 1.1.0
matplotlib: 2.2.2 {backend = Qt5Agg}sklearn: 0.19.2
nibabel: 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 я получаю разные ошибки, но не segfault.
Я столкнулся с аналогичной / такой же ошибкой segfault на другом компьютере, но очень похожей сборкой 18.04
со следующими характеристиками:
Платформа: Linux-4.15.0-36-generic-x86_64-with-debian-buster-sid
Python: 3.6.6 | Anaconda, Inc. | (по умолчанию, 28 июня 2018 г., 17:14:51) [GCC 7.2.0]
Исполняемый файл: / home / nordme / miniconda3 / envs / mne / bin / python
Процессор: x86_64: 12 ядер
Оперативная память: 15,5 ГБmne: 0.17.dev0
число: 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
дипы: 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()"
В основном я подозреваю, что проблема в том, что цикл событий не запущен, и поэтому система находится в не полностью отрисованном состоянии при попытке сделать снимок экрана.
Мы работаем над этим в PySurfer, принудительно выполняя рендеринг с помощью этого небольшого трюка GUI
.
@prabhuramachandran, предполагая, что это что-то исправляет, возможно, есть способ проверить, действительно ли контекст OpenGL (или что-то еще) действительно действителен, прежде чем пытаться сделать снимок экрана, и если это не так, используйте этот трюк / хак для обработки событий, чтобы он стал действительный. Кажется немного сомнительным / слишком хакерским, так что, возможно, оно того не стоит.
@larsoner - да, я понял то же самое (см. мой предыдущий комментарий) и хочу в какой-то момент исправить это в mlab. Я надеюсь добраться до этого в какой-то момент. Кроме того, начиная с версии 4.6.1, mlab имеет функцию process_ui_events
которая вызывает события процесса без необходимости импорта графического интерфейса пользователя и т. Д. (Http://docs.enoughtt.com/mayavi/mayavi/auto/changes .html # id10).
Самый полезный комментарий
Можете ли вы подтвердить, что эта модификация исправляет ситуацию?
Или оболочка однострочная:
В основном я подозреваю, что проблема в том, что цикл событий не запущен, и поэтому система находится в не полностью отрисованном состоянии при попытке сделать снимок экрана.
Мы работаем над этим в PySurfer, принудительно выполняя рендеринг с помощью этого небольшого трюка
GUI
.@prabhuramachandran, предполагая, что это что-то исправляет, возможно, есть способ проверить, действительно ли контекст OpenGL (или что-то еще) действительно действителен, прежде чем пытаться сделать снимок экрана, и если это не так, используйте этот трюк / хак для обработки событий, чтобы он стал действительный. Кажется немного сомнительным / слишком хакерским, так что, возможно, оно того не стоит.