Python en Mac OS Pycharm da error de marco con “importar matplotlib.pyplot como plt”

Esta pregunta es similar a las de aquí y aquí, pero ninguna de las soluciones allí funciona, quizás porque estoy usando un entorno diferente (PyCharm en Mac OS).

En un entorno virtual con PyCharm ejecutándose en 2.7.15, matplotlib instalado sin ninguna queja, y un archivo de Python de PyCharm de una línea con el siguiente contenido …

import matplotlib.pyplot as plt 

… la consola genera el siguiente error al ejecutar este archivo de una línea:

 /Users/jbs/PycharmProjects/WakeUp/env/bin/python /Users/jbs/PycharmProjects/WakeUp/InputSound/WakeInputSound-and-plot-it-trial3.py Traceback (most recent call last): File "/Users/jbs/PycharmProjects/WakeUp/InputSound/WakeInputSound-and-plot-it-trial3.py", line 2, in  import matplotlib.pyplot as plt File "/Users/jbs/PycharmProjects/WakeUp/env/lib/python2.7/site-packages/matplotlib/pyplot.py", line 115, in  _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() File "/Users/jbs/PycharmProjects/WakeUp/env/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup [backend_name], 0) File "/Users/jbs/PycharmProjects/WakeUp/env/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 17, in  from matplotlib.backends import _macosx RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. 

Cualquier ayuda para resolver esto sería muy bienvenida. He probado una docena de cosas y ninguna parece funcionar …

(importar matplotlib solo no da problemas y esta pregunta puede estar relacionada con esta, pero es claramente diferente …)

Para más detalles, consulte: qué es backend . Necesitas configurar tu backend. Hay dos tipos de backends: backends de interfaz de usuario (para uso en pygtk, wxpython, tkinter, qt4 o macosx; también conocidos como “backends interactivos”) y backends de copia dura para hacer archivos de imagen (PNG, SVG, PDF, PS; también conocido como “backends no interactivos”).

Hay cuatro formas de configurar tu backend. Si entran en conflicto entre sí, se utilizará el último método mencionado en la siguiente lista, por ejemplo, llamando a use () anulará la configuración en su matplotlibrc.

  1. El parámetro backend en su archivo matplotlibrc (consulte Personalización de matplotlib):

     backend : WXAgg # use wxpython with antigrain (agg) rendering 
  2. Configuración de la variable de entorno MPLBACKEND, ya sea para su shell actual o para un solo script:

     > export MPLBACKEND="module://my_backend" > python simple_plot.py > MPLBACKEND="module://my_backend" python simple_plot.py 

    La configuración de esta variable de entorno anulará el parámetro de backend en cualquier matplotlibrc, incluso si hay un matplotlibrc en su directorio de trabajo actual. Por lo tanto, no se recomienda configurar MPLBACKEND globalmente, por ejemplo, en su .bashrc o .profile, ya que podría conducir a un comportamiento contraintuitivo.

  3. Para configurar el backend para un solo script, también puede usar el argumento de la línea de comando -d:

     > python script.py -dbackend 

    Este método está en desuso ya que el argumento -d podría entrar en conflicto con los scripts que analizan los argumentos de la línea de comandos (consulte el número de problema 1986). Deberías usar MPLBACKEND en su lugar.

  4. Si su script depende de un backend específico, puede usar la función use ():

     import matplotlib matplotlib.use('PS') # generate postscript output by default 

    Si usa la función use (), esto debe hacerse antes de importar matplotlib.pyplot. Llamar a use () después de que se haya importado pyplot no tendrá ningún efecto. El uso de () requerirá cambios en su código si los usuarios desean usar un backend diferente. Por lo tanto, debe evitar llamar explícitamente a use () a menos que sea absolutamente necesario.

Nota: las especificaciones del nombre del backend no distinguen entre mayúsculas y minúsculas; por ejemplo, ‘GTKAgg’ y ‘gtkagg’ son equivalentes.