Невозможно " импортировать matplotlib.pyplot as 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 как фреймворк" и как его установить?

7 64

7 ответов:

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

$ cd ~/.matplotlib
$ nano matplotlibrc

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

я получил ту же ошибку, и попытался Jonathan'ы ответ:

вы можете исправить эту проблему с помощью backend Agg

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

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

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

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

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

import matplotlib

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

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

У меня была аналогичная проблема, когда я использовал 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

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

если вы не хотите устанавливать .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')

enter image description here

вы можете исправить эту проблему с помощью backend Agg

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

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

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

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