Opened 5 hours ago

Last modified 3 hours ago

#71316 assigned defect

py-matplotlib: No event loop integration for 'macosx'

Reported by: AgilentGCMS Owned by: reneeotten (Renee Otten)
Priority: Normal Milestone:
Component: ports Version: 2.10.4
Keywords: Cc:
Port: py-matplotlib

Description

This morning I upgraded from macports 2.10.2 to 2.10.4, and then ran a port selfupdate && port upgrade outdated. After the upgrade, I can no longer do ipython --pylab for interactive plotting in matplotlib. I get the error UnknownBackend: No event loop integration for 'macosx'. Supported event loops are: qt, qt5, qt6, gtk, gtk2, gtk3, gtk4, tk, wx, pyglet, glut, osx, asyncio. Here is the full traceback.

ipython --pylab
Python 3.11.10 (main, Sep  7 2024, 05:47:53) [Clang 15.0.0 (clang-1500.3.9.4)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.25.0 -- An enhanced Interactive Python. Type '?' for help.
[TerminalIPythonApp] WARNING | GUI event loop or pylab initialization failed
---------------------------------------------------------------------------
UnknownBackend                            Traceback (most recent call last)
File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/IPython/core/shellapp.py:278, in InteractiveShellApp.init_gui_pylab.<locals>.<lambda>(key)
    276 shell = self.shell
    277 if self.pylab:
--> 278     enable = lambda key: shell.enable_pylab(key, import_all=self.pylab_import_all)
    279     key = self.pylab
    280 elif self.matplotlib:

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/IPython/core/interactiveshell.py:3719, in InteractiveShell.enable_pylab(self, gui, import_all, welcome_message)
   3692 """Activate pylab support at runtime.
   3693
   3694 This turns on support for matplotlib, preloads into the interactive
   (...)
   3715     This argument is ignored, no welcome message will be displayed.
   3716 """
   3717 from IPython.core.pylabtools import import_pylab
-> 3719 gui, backend = self.enable_matplotlib(gui)
   3721 # We want to prevent the loading of pylab to pollute the user's
   3722 # namespace as shown by the %who* magics, so we execute the activation
   3723 # code in an empty namespace, and we update *both* user_ns and
   3724 # user_ns_hidden with this information.
   3725 ns = {}

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/IPython/core/interactiveshell.py:3665, in InteractiveShell.enable_matplotlib(self, gui)
   3662     import matplotlib_inline.backend_inline
   3664 from IPython.core import pylabtools as pt
-> 3665 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
   3667 if gui != None:
   3668     # If we have our first gui selection, store it
   3669     if self.pylab_gui_select is None:

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/IPython/core/pylabtools.py:346, in find_gui_and_backend(gui, gui_select)
    344 if gui in ("auto", None):
    345     backend = matplotlib.rcParamsOrig["backend"]
--> 346     backend, gui = backend_registry.resolve_backend(backend)
    347 else:
    348     gui = _convert_gui_to_matplotlib(gui)

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/backends/registry.py:354, in BackendRegistry.resolve_backend(self, backend)
    351 else:  # Might be _auto_backend_sentinel or None
    352     # Use whatever is already running...
    353     from matplotlib import get_backend
--> 354     backend = get_backend()
    356 # Is backend already known (built-in or dynamically loaded)?
    357 gui = (self._BUILTIN_BACKEND_TO_GUI_FRAMEWORK.get(backend) or
    358        self._backend_to_gui_framework.get(backend))

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/__init__.py:1281, in get_backend()
   1273 def get_backend():
   1274     """
   1275     Return the name of the current backend.
   1276
   (...)
   1279     matplotlib.use
   1280     """
-> 1281     return rcParams['backend']

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/__init__.py:764, in RcParams.__getitem__(self, key)
    762     if val is rcsetup._auto_backend_sentinel:
    763         from matplotlib import pyplot as plt
--> 764         plt.switch_backend(rcsetup._auto_backend_sentinel)
    766 return self._get(key)

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/pyplot.py:400, in switch_backend(newbackend)
    398 for candidate in candidates:
    399     try:
--> 400         switch_backend(candidate)
    401     except ImportError:
    402         continue

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/pyplot.py:521, in switch_backend(newbackend)
    518     close("all")
    520 # Make sure the repl display hook is installed in case we become interactive.
--> 521 install_repl_displayhook()

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/pyplot.py:312, in install_repl_displayhook()
    310 # trigger IPython's eventloop integration, if available
    311 if ipython_gui_name:
--> 312     ip.enable_gui(ipython_gui_name)

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/IPython/terminal/interactiveshell.py:977, in TerminalInteractiveShell.enable_gui(self, gui)
    973     self.active_eventloop = self._inputhook = None
    975 if gui and (gui not in {None, "webagg"}):
    976     # This hook runs with each cycle of the `prompt_toolkit`'s event loop.
--> 977     self.active_eventloop, self._inputhook = get_inputhook_name_and_func(gui)
    978 else:
    979     self.active_eventloop = self._inputhook = None

File ~/packages/macports/sonoma/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/IPython/terminal/pt_inputhooks/__init__.py:128, in get_inputhook_name_and_func(gui)
    125     return gui, registered[gui]
    127 if gui not in backends:
--> 128     raise UnknownBackend(gui)
    130 if gui in aliases:
    131     return get_inputhook_name_and_func(aliases[gui])

UnknownBackend: No event loop integration for 'macosx'. Supported event loops are: qt, qt5, qt6, gtk, gtk2, gtk3, gtk4, tk, wx, pyglet, glut, osx, asyncio

Here is info about my current py311-matplotlib:

$ port info py311-matplotlib
py311-matplotlib @3.9.2 (python, graphics, math)
Variants:             [+]cairo, dvipng, ghostscript, gtk3, latex, pdftops, pyside2, qt5, tkinter, universal

Description:          Matplotlib strives to produce publication quality 2D graphics for interactive graphing, scientific publishing, user interface development and web application
                      servers targeting multiple user interfaces and hardcopy output formats. There is a 'pylab' mode which emulates matlab graphics. The library uses numpy for
                      handling large data sets and supports a variety of output backends. This port provides variants for the different GUIs (gtk2, gtk3, tkinter, qt4, qt5, cairo,
                      latex).
Homepage:             https://matplotlib.org/

Build Dependencies:   py311-setuptools_scm, pkgconfig, py311-certifi, py311-pybind11, ninja, py311-build, py311-installer, py311-meson-python
Library Dependencies: freetype, qhull, py311-contourpy, py311-cycler, py311-dateutil, py311-fonttools, py311-kiwisolver, py311-numpy, py311-parsing, py311-packaging, py311-Pillow,
                      py311-cairo, python311
Platforms:            darwin
License:              (PSF or BSD)
Maintainers:          Email: reneeotten@macports.org, GitHub: reneeotten
                      Policy: openmaintainer

I have done the naive thing of replacing macosx by osx as backend in my ~/.matplotlib/matplotlibrc, but that has not fixed this issue.

Change History (3)

comment:1 Changed 5 hours ago by reneeotten (Renee Otten)

Cc: reneeotten removed
Owner: set to reneeotten
Port: py-matplotlib added; py311-matplotlib removed
Status: newassigned
Summary: No event loop integration for 'macosx'py-matplotlib: No event loop integration for 'macosx'

Not sure which OS you are using but if it’s before 10.12 then the “macosx” backend will not be compiled (upstream supports 10.12+). So if that’s the case then you’ll just have to specify another backend.

Last edited 5 hours ago by reneeotten (Renee Otten) (previous) (diff)

comment:2 Changed 4 hours ago by AgilentGCMS

I'm on Sonoma 14.7.1. The macosx backend was working until I did that port selfupdate && port upgrade outdated.

comment:3 Changed 3 hours ago by AgilentGCMS

P.S. - I would love to use the Qt5Agg backend but can't because of #71055, which is a duplicate of #68415.

Note: See TracTickets for help on using tickets.