Este archivo: minimal_example_fail.py:
import faulthandler
faulthandler.enable()
from mayavi import mlab
mlab.test_plot3d()
mlab.screenshot()
falla con la siguiente pila:
$ 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)
Reproducir:
$ 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
No puedo reproducir esto, pero hay otro problema con el que me encuentro. El problema es que la ventana tiene un tamaño cero. Esto es realmente un problema de Qt ya que el mainloop no se está ejecutando. ¿Puedes probar esto en una sesión de IPython con %gui qt
y ver?
¿Es esto lo que quieres decir?
$ 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)
Intenté esto en mi máquina ubuntu con VTK-8.1.1 (de pip), Python 3.6.0, mayavi master, pyqt5 5.10.1 y obtengo un error pero no segfault. El error que veo se debe a un problema más profundo que, sin el kit de herramientas de la interfaz de usuario en ejecución, no hay ninguna ventana abierta, por lo que el tamaño de la pantalla sigue siendo cero, pero esto no se produce por defecto. Trabajaré para resolver el otro problema con el tamaño cero, pero desafortunadamente, no puedo reproducir su error de segmentación.
He encontrado un error de segfault similar, si no el mismo, en máquinas OSX y Linux. Pude reducirlo a una posible confirmación de mayavi
que causa el error.
fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0 es la primera confirmación incorrecta
cometer fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0
Autor: Prabhu Ramachandran [email protected]
Fecha: viernes 3 de agosto 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
Voy a ver si puedo reproducir con un mínimo de @dnacombo
Puedo reproducir usando el ejemplo mínimo, pero solo en mi caja de Linux.
Plataforma: Linux-4.15.0-34-generic-x86_64-with-debian-buster-sid
Python: 3.6.6 | Anaconda, Inc. | (predeterminado, 28 de junio de 2018, 17:14:51) [GCC 7.2.0]
Ejecutable: / home / ktavabi / miniconda3 / envs / mne / bin / python
CPU: x86_64: 24 núcleos
Memoria: 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
nibabel: 2.4.0dev
mayavi: 4.7.0.dev04.6.0{qt_api = pyqt5}
cupy: No encontrado
pandas: 0.23.4
dipy: 0.15.0dev
vtk: 8.1.1
En mi máquina OSX obtengo diferentes errores, pero no segfault.
Encontré un error de segfault similar / mismo en una máquina diferente pero muy similar 18.04
build con las siguientes especificaciones:
Plataforma: Linux-4.15.0-36-generic-x86_64-with-debian-buster-sid
Python: 3.6.6 | Anaconda, Inc. | (predeterminado, 28 de junio de 2018, 17:14:51) [GCC 7.2.0]
Ejecutable: / home / nordme / miniconda3 / envs / mne / bin / python
CPU: x86_64: 12 núcleos
Memoria: 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
nibabel: 2.3.0
mayavi: 4.7.0.dev0 {qt_api = pyqt5}
cupy: No encontrado
pandas: 0.23.4
dipy: 0.14.0
Cambiar a la versión a19c710c3f61389d79ed05271584e44f9744f6bc
4.6.0 resolvió el error. LMK si quieres ver el rastro.
¿Puede confirmar que esta modificación corrige las cosas?
from pyface.api import GUI
from mayavi import mlab
mlab.test_plot3d()
GUI().process_events()
mlab.screenshot()
O un caparazón de una sola línea:
python -c "from pyface.api import GUI; from mayavi import mlab; mlab.test_plot3d(); GUI().process_events(); mlab.screenshot()"
Básicamente, sospecho que el problema es que el bucle de eventos no se inicia y, por lo tanto, el sistema se encuentra en un estado no representado por completo cuando se intenta la captura de pantalla.
Trabajamos alrededor de esto en PySurfer forzando el renderizado con este pequeño truco GUI
.
@prabhuramachandran asumiendo que esto soluciona las cosas, es posible que haya alguna forma de verificar si el contexto OpenGL (o alguna otra cosa) es realmente válido antes de intentar la captura de pantalla, y si no lo es, use este truco / truco para procesar eventos para que se convierta en válido. Sin embargo, parece un poco dudoso / demasiado hacky, así que tal vez no valga la pena.
@larsoner : sí, pensé lo mismo (ver mi comentario anterior) y quiero arreglarlo limpiamente en mlab en algún momento. Espero llegar a eso en algún momento. Además, a partir de la versión 4.6.1, mlab tiene una función process_ui_events
que llama a eventos de proceso sin que el usuario tenga que importar GUI, etc. (http://docs.enthought.com/mayavi/mayavi/auto/changes .html # id10).
Comentario más útil
¿Puede confirmar que esta modificación corrige las cosas?
O un caparazón de una sola línea:
Básicamente, sospecho que el problema es que el bucle de eventos no se inicia y, por lo tanto, el sistema se encuentra en un estado no representado por completo cuando se intenta la captura de pantalla.
Trabajamos alrededor de esto en PySurfer forzando el renderizado con este pequeño truco
GUI
.@prabhuramachandran asumiendo que esto soluciona las cosas, es posible que haya alguna forma de verificar si el contexto OpenGL (o alguna otra cosa) es realmente válido antes de intentar la captura de pantalla, y si no lo es, use este truco / truco para procesar eventos para que se convierta en válido. Sin embargo, parece un poco dudoso / demasiado hacky, así que tal vez no valga la pena.