Este arquivo: minimal_example_fail.py:
import faulthandler
faulthandler.enable()
from mayavi import mlab
mlab.test_plot3d()
mlab.screenshot()
falha com a seguinte pilha:
$ 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)
Reproduzir:
$ 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
Não consigo reproduzir isso, mas há outro problema com o qual me deparo. O problema é que a janela tem tamanho zero. Este é realmente um problema do Qt já que o mainloop não está rodando. Você pode tentar isso em uma sessão IPython com %gui qt
e ver?
É isto que você quer dizer?
$ 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)
Eu tentei isso em minha máquina ubuntu com VTK-8.1.1 (do pip), Python 3.6.0, mayavi master, pyqt5 5.10.1 e recebo um erro, mas sem segfault. O erro que estou vendo é devido a um problema mais profundo que, sem o kit de ferramentas de IU em execução, não há nenhuma janela aberta, então o tamanho da tela ainda é zero, mas isso não gera segfault. Vou trabalhar para resolver o outro problema com o tamanho zero, mas, infelizmente, não consigo reproduzir o seu segfault.
Encontrei um erro de falha de segmento semelhante, se não o mesmo, em máquinas OSX e Linux. Consegui restringi-lo a um possível commit de mayavi
causando o erro.
fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0 é o primeiro commit incorreto
commit fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0
Autor: Prabhu Ramachandran [email protected]
Data: Sex, 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
Vou ver se consigo reproduzir com o mínimo de @dnacombo
Posso reproduzir usando o exemplo mínimo, mas apenas na minha caixa Linux.
Plataforma: Linux-4.15.0-34-generic-x86_64-with-debian-buster-sid
Python: 3.6.6 | Anaconda, Inc. | (padrão, 28 de junho de 2018, 17:14:51) [GCC 7.2.0]
Executável: / home / ktavabi / miniconda3 / envs / mne / bin / python
CPU: x86_64: 24 núcleos
Memória: 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: Não encontrado
pandas: 0.23.4
dipy: 0.15.0dev
vtk: 8.1.1
Na minha máquina OSX recebo erros diferentes, mas nenhum segfault.
Encontrei um erro de falha de segmento semelhante / igual em uma máquina diferente, mas 18.04
build muito semelhante com as seguintes especificações:
Plataforma: Linux-4.15.0-36-generic-x86_64-with-debian-buster-sid
Python: 3.6.6 | Anaconda, Inc. | (padrão, 28 de junho de 2018, 17:14:51) [GCC 7.2.0]
Executável: / home / nordme / miniconda3 / envs / mne / bin / python
CPU: x86_64: 12 núcleos
Memória: 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: Não encontrado
pandas: 0.23.4
dipy: 0.14.0
Mudar para a versão a19c710c3f61389d79ed05271584e44f9744f6bc
4.6.0 resolveu o erro. LMK se você quiser ver o traço.
Você pode confirmar que esta modificação corrige as coisas?
from pyface.api import GUI
from mayavi import mlab
mlab.test_plot3d()
GUI().process_events()
mlab.screenshot()
Ou um one-liner shell:
python -c "from pyface.api import GUI; from mayavi import mlab; mlab.test_plot3d(); GUI().process_events(); mlab.screenshot()"
Basicamente, suspeito que o problema é que o loop de eventos não foi iniciado e, portanto, o sistema está em algum estado não totalmente renderizado quando a captura de tela é tentada.
Nós contornamos isso no PySurfer forçando a renderização com este pequeno truque GUI
.
@prabhuramachandran presumindo que isso corrige as coisas, é possível que haja alguma maneira de verificar se o contexto OpenGL (ou alguma outra coisa) é realmente válido antes de tentar a captura de tela, e se não for, use este truque / hack para processar eventos para que se torne válido. Parece um pouco duvidoso / muito hacky, então talvez não valha a pena.
@larsoner - sim, descobri a mesma coisa (veja meu comentário anterior) e quero consertar de forma limpa no mlab em algum momento. Espero chegar lá em algum momento. Além disso, a partir da v 4.6.1, o mlab tem uma função process_ui_events
que chama eventos de processo sem que o usuário tenha que importar a GUI etc. (http://docs.enthought.com/mayavi/mayavi/auto/changes .html # id10).
Comentários muito úteis
Você pode confirmar que esta modificação corrige as coisas?
Ou um one-liner shell:
Basicamente, suspeito que o problema é que o loop de eventos não foi iniciado e, portanto, o sistema está em algum estado não totalmente renderizado quando a captura de tela é tentada.
Nós contornamos isso no PySurfer forçando a renderização com este pequeno truque
GUI
.@prabhuramachandran presumindo que isso corrige as coisas, é possível que haja alguma maneira de verificar se o contexto OpenGL (ou alguma outra coisa) é realmente válido antes de tentar a captura de tela, e se não for, use este truque / hack para processar eventos para que se torne válido. Parece um pouco duvidoso / muito hacky, então talvez não valha a pena.