Impossible d '" importer matplotlib.pyplot comme plt" dans le virtualenv

je travaille avec flasque dans un environnement virtuel. J'ai pu installer matplotlib avec pip, et je peux import matplotlib dans une session Python. Cependant, quand je l'importe comme

matplotlib.pyplot as plt

j'obtiens l'erreur suivante:

>>> import matplotlib.pyplot as plt

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/pyplot.py", line 109, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "//anaconda/envs/myenv/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 24, in <module>
    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. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends.

Je ne comprends pas pourquoi il me demande d'installer Python comme framework. N'est-ce pas existe déjà? Que signifie "installer Python comme framework", et comment l'installer?

64
demandé sur ali_m 2015-04-03 17:11:37

7 réponses

Ce solution a fonctionné pour moi. Si vous avez déjà installé matplotlib en utilisant pip sur votre environnement virtuel, vous pouvez simplement taper ce qui suit:

$ cd ~/.matplotlib
$ nano matplotlibrc

et ensuite, écrivez backend: TkAgg là-dedans. Si vous avez besoin de plus d'informations, allez simplement sur le lien solution.

149
répondu Hercules 2017-05-23 11:47:24

j'ai eu la même erreur, et j'ai essayé Jonathan 's réponse:

vous pouvez corriger ce problème en utilisant le backend Agg

Aller à User/yourname/.matplotlib et ouvrir/créer matplotlibrc et ajouter la ligne suivante backend : Agg et cela devrait fonctionner pour vous.

j'exécute le programme, pas d'erreur, mais aussi pas de tracés, et j'ai essayé backend: Qt4Agg , il ressort que je N'ai pas installé PyQt4.

puis j'ai essayé un autre backend: backend: TkAgg , ça marche!

donc peut-être que nous pouvons essayer les sauvegardes de difference et que certaines peuvent fonctionner ou installer les paquets requis comme PyQt4.

voici un échantillon de Python snippet que vous pouvez essayer et tester matplotlib.

import matplotlib

matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [0, 3, 7])
plt.show()
29
répondu JasonWayne 2015-12-21 09:13:15

j'ai eu le même problème quand j'ai utilisé pip pour installer matplotlib. Par défaut, il installé la dernière version 1.5.0. Cependant, j'avais un autre environnement virtuel avec Python 3.4 et matplotlib 1.4.3 et cet environnement fonctionnait très bien lorsque j'ai importé matplotlib.pyplot. Par conséquent, j'ai installé la version précédente de matplotlib en utilisant ce qui suit:

cd path_to_virtual_environment    # assume directory is called env3
env3/bin/pip install matplotlib==1.4.3

je sais que ce n'est qu'une solution de rechange, mais ça a fonctionné pour moi comme solution à court terme.

14
répondu user1718097 2015-10-31 02:39:29

si vous ne voulez pas configurer un fichier de configuration .matplotib/matplotlibrc , vous pouvez contourner ce problème en paramétrant le 'Agg' à l'exécution juste après l'importation de matplotlib et avant l'importation de matplotlib.pyplot :

In [1]: import matplotlib

In [2]: matplotlib.use('Agg')

In [3]: import matplotlib.pyplot as plt

In [4]: fig, ax = plt.subplots(1, 1)

In [5]: import numpy as np

In [6]: x = np.linspace(-1., 1.)

In [7]: y = np.sin(x)

In [8]: ax.plot(x, y)
Out[8]: [<matplotlib.lines.Line2D at 0x1057ecf10>]

In [9=]: fig.savefig('myplot.png')

enter image description here

7
répondu Pedro M Duarte 2016-09-16 20:17:09

vous pouvez corriger ce problème en utilisant le backend Agg

Aller à User/yourname/.matplotlib et ouvrir/créer matplotlibrc et ajouter la ligne suivante backend : Agg et cela devrait fonctionner pour vous.

4
répondu Jonathan 2015-11-23 14:42:17

bien que la plupart des réponses semblent pointer vers la correction du script activate pour utiliser le système python, j'avais du mal à obtenir que cela fonctionne et une solution facile pour moi - bien qu'un peu cringey - était d'installer matplotlib à l'environnement global et de l'utiliser au lieu d'une instance virtualenv. Vous pouvez le faire soit en créant votre virtualenv avec l'option --system-site-packages comme virtualenv --system-site-packages foo , soit en utilisant l'Option universal flag lors de l'installation de pip comme pip install -U matplotlib .

0
répondu Bobby 2015-11-10 20:09:45

une solution propre et facile consiste à créer un noyau qui positionne PYTHONHOME à VIRTUAL_ENV et utilise ensuite l'exécutable Python système (au lieu de celui du virtualenv).

si vous voulez automatiser la création d'un tel noyau, vous pouvez utiliser le script jupyter-virtualenv-osx .

0
répondu Mapio 2018-04-18 12:30:15