Estoy creando una aplicación PySide2 que usa matplotlib. Estoy ejecutando esta aplicación de Spyder en un entorno con PySide2 instalado. Esto está provocando que la aplicación se ejecute desde la consola de iPython. En algún lugar de la línea, se importa PyQt5, que estoy intentando purgar para convencer a matplotlib de que realmente quiero usar PySide2, NO PyQt5. Algo como seguir funcionaba hasta hace muy poco y no estoy realmente seguro de por qué se detuvo, pero es seguro decir que este método no es confiable. ¿Cómo puedo convencer absolutamente a matplotlib de que quiero PySide2?

Intenté configurar la variable de entorno QT_API en el sistema operativo (Windows 10), pero en este caso, el propio Spyder se niega a abrir.

import sys
import os

ps = list(filter(lambda x: 'PyQt5' in x, sys.modules))
for p in ps:
    print(f"purging module {p}")
    sys.modules.pop(p)
    
# matplotlib.__init__ uses this
os.environ["MPLBACKEND"] = "PySide2"

# matplotlib.backends.qt_compat uses this
os.environ["QT_API"] = "PySide2"

import PySide2.QtCore

assert "PyQt5.QtCore" not in sys.modules
assert "PySide2.QtCore" in sys.modules

# rcParams has the right idea
from matplotlib import rcParams
print(rcParams["backend"])

# qt_compat has the WRONG idea!
import matplotlib.backends.qt_compat as qt_compat
print(qt_compat.QT_API)

# The FigureCanvasWidget is of the wrong (PyQt5) type
from matplotlib.backends.backend_qt5agg import FigureCanvas
import inspect
print(inspect.getmro(FigureCanvas))
0
Mark 25 feb. 2021 a las 07:05

1 respuesta

La mejor respuesta

Para responder a esta pregunta, la razón por la que dejó de funcionar fue porque había configurado 'activar soporte' para gráficos Matplotlib en la pestaña ipython en la configuración de Spyder. Después de desmarcar esto, lo anterior funciona.

0
Mark 8 mar. 2021 a las 23:22