Подтвердить что ты не робот

Не удалось "импортировать matplotlib.pyplot как plt" в virtualenv

Я работаю с флягой в виртуальной среде. Я смог установить matplotlib с pip, и я могу import matplotlib в сеансе Python. Однако, когда я импортирую его как

matplotlib.pyplot as plt

Я получаю следующую ошибку:

>>> 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.

Я смущен тем, почему он просит меня установить Python как фреймворк. Разве он уже не существует? Что значит "установить Python как фреймворк" и как его установить?

4b9b3361

Ответ 1

Это решение работало для меня. Если вы уже установили matplotlib с помощью pip в своей виртуальной среде, вы можете просто ввести следующее:

$ cd ~/.matplotlib
$ nano matplotlibrc

И тогда напишите backend: TkAgg там. Если вам нужна дополнительная информация, просто перейдите к ссылке на решение.

Ответ 2

Я получил ту же ошибку и попробовал ответить Jonathan:

Вы можете исправить эту проблему, используя бэкэнд Agg

Перейдите к User/yourname/.matplotlib и откройте/создайте matplotlibrc и добавьте следующую строку backend : Agg, и она должна работать для вас.

Я запускаю программу, никаких ошибок, но также и никаких графиков, и я попробовал backend: Qt4Agg, он печатает, что у меня нет PyQt4.

Затем я попробовал другой бэкэнд: backend: TkAgg, он работает!

Так что, возможно, мы можем попробовать разницу, а некоторые могут работать или устанавливать требуемые пакеты, такие как PyQt4.

Вот пример фрагмента питона, который вы можете попробовать и проверить matplotlib.

import matplotlib

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

plt.plot([1, 2, 3], [0, 3, 7])
plt.show()

Ответ 3

У меня была аналогичная проблема, когда я использовал pip для установки matplotlib. По умолчанию установлена ​​последняя версия, которая была 1.5.0. Однако у меня была другая виртуальная среда с Python 3.4 и matplotlib 1.4.3, и эта среда отлично работала, когда я импортировал matplotlib.pyplot. Поэтому я установил более раннюю версию matplotlib, используя следующее:

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

Я знаю, что это только работа, но это работало для меня как краткосрочное решение.

Ответ 4

Если вы не хотите устанавливать конфигурационный файл .matplotib/matplotlibrc, вы можете обойти эту проблему, установив бэкэнд 'Agg' во время выполнения сразу после импорта matplotlib и перед импортом 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')

введите описание изображения здесь

Ответ 5

Вы можете исправить эту проблему, используя бэкэнд Agg

Перейдите к User/yourname/.matplotlib и откройте/создайте matplotlibrc и добавьте следующую строку backend : Agg, и она будет работать для вас.

Ответ 6

Хотя большинство ответов, похоже, указывают на исправление activate script для использования системного python, у меня возникли проблемы с тем, чтобы это работало, и легкое решение для меня - хотя и немного cringey - должно было установить matplotlib для глобальной среде и использовать это вместо экземпляра virtualenv. Вы можете сделать это, создав свой virtualenv с флагом -system-site-packages, например virtualenv --system-site-packages foo, или использовать универсальный флаг, когда pip устанавливает, например, pip install -U matplotlib.

Ответ 7

Чистым и простым решением является создание ядра, которое устанавливает PYTHONHOME в "VIRTUAL_ENV", а затем использует исполняемый файл системы Python (вместо виртуального).

Если вы хотите автоматизировать создание такого ядра, вы можете использовать jupyter-virtualenv-osx script.