web-dev-qa-db-fra.com

Impossible d'importer matplotlib.pyplot en tant que plt dans virtualenv

Je travaille avec flask dans un environnement virtuel. J'ai pu installer matplotlib avec pip et je peux import matplotlib dans une Python session. Cependant, lorsque je l’importe en tant que

matplotlib.pyplot as plt

Je reçois 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 en tant que framework. N'existe-t-il pas déjà? Que signifie "installer Python en tant que framework" et comment puis-je l'installer?

66
Rohit

Cette solution a fonctionné pour moi. Si vous avez déjà installé matplotlib en utilisant pip sur votre environnement virtuel, vous pouvez simplement taper les éléments suivants:

$ cd ~/.matplotlib
$ nano matplotlibrc

Et ensuite, écrivez backend: TkAgg dedans. Si vous avez besoin de plus d'informations, cliquez simplement sur le lien de la solution.

159
Hercules

J'ai la même erreur et j'ai essayé la réponse de Jonathan:

Vous pouvez résoudre ce problème en utilisant le backend Agg

Aller à User/yourname/.matplotlib et ouvrez/créez matplotlibrc et ajoutez la ligne suivante backend : Agg et cela devrait fonctionner pour vous.

Je lance le programme, pas d'erreur, mais aussi pas de tracé, et j'ai essayé backend: Qt4Agg, il est indiqué que je n’ai pas installé PyQt4.

Puis j'ai essayé un autre backend: backend: TkAgg, Ça marche!

Alors peut-être que nous pouvons essayer différents systèmes et que certains peuvent fonctionner ou installer les paquets requis tels que PyQt4.

Voici un exemple python 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
JasonWayne

J'ai eu le même problème lorsque j'ai utilisé pip pour installer matplotlib. Par défaut, il a 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 bien lorsque j'ai importé matplotlib.pyplot. J'ai donc installé la version précédente de matplotlib à l'aide des éléments suivants:

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 contournement, mais cela a fonctionné pour moi en tant que solution à court terme.

15
user1718097

Si vous ne voulez pas définir un .matplotib/matplotlibrc fichier de configuration, vous pouvez contourner ce problème en définissant le paramètre 'Agg' backend au moment de 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

8
Pedro M Duarte

Vous pouvez résoudre ce problème en utilisant le backend Agg

Aller à User/yourname/.matplotlib et ouvrez/créez matplotlibrc et ajoutez la ligne suivante backend : Agg et cela devrait fonctionner pour vous.

4
Jonathan

Une solution simple et propre consiste à créer un noyau qui définit PYTHONHOME sur VIRTUAL_ENV et utilise ensuite le système Python exécutable (au lieu de celui de virtualenv).

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

0
Mapio

Bien que la plupart des réponses semblent indiquer que le script activate doit être corrigé pour utiliser le python système, je ne parvenais pas à le faire fonctionner et une solution simple pour moi - bien qu'un peu dégoûtante - consistait à installer matplotlib dans l'environnement global. et l'utiliser à la place d'une instance virtualenv. Vous pouvez le faire soit en créant votre virtualenv avec l’indicateur --system-site-packages tel que virtualenv --system-site-packages foo, ou d’utiliser le drapeau universel lors de l’installation de pip comme pip install -U matplotlib.

0
Bobby