matplotlib: RuntimeError: Python не установлен как структура

Этот вопрос задавали и здесь, здесь и здесь. Однако решение не устранило проблему для моего случая.

Первоначальная ошибка, когда я пытаюсь import matplotlib.pyplot, я получил:

Traceback (последний последний вызов): Файл "", строка 1, в файле "/Users/XX/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py", строка 114, в _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() Файл "/Users/XX/anaconda/lib/python2.7/site-packages/matplotlib/backends/init.py", строка 32, в pylab_setup globals(), locals(), [backend_name ], 0) Файл "/Users/XX/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", строка 24, из matplotlib.backends import _macosx RuntimeError: Python не установлен как фреймворк. Бэкэнд Mac OS X не сможет нормально функционировать, если Python не установлен как фреймворк. Дополнительную информацию об установке Python в качестве платформы в Mac OS X см. В документации Python. Пожалуйста, переустановите Python как фреймворк или попробуйте один из других бэкэндов. Если вы работаете с Matplotlib в виртуальной среде, см. "Работа с Matplotlib в виртуальных средах" в FAQ Matplotlib

Я следил за решениями, чтобы добавить файл ~/.matplotlib/matplotlibrc с кодом: backend: TkAgg. После этого моя ошибка изменилась на:

/Users/XX/anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib создает кеш шрифтов с помощью fc-list. Это может занять некоторое время. warnings.warn('Matplotlib строит кеш шрифтов, используя fc-list. Это может занять некоторое время.') objc [25120]: Class TKApplication реализуется как в /Users/XX/anaconda/lib/libtk8.5.dylib, так и в /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. Один из двух будет использован. Какой из них не определен. objc [25120]: класс TKMenu реализован как в /Users/XX/anaconda/lib/libtk8.5.dylib, так и в /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. Один из двух будет использован. Какой из них не определен. objc [25120]: класс TKContentView реализован как в /Users/XX/anaconda/lib/libtk8.5.dylib, так и в /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. Один из двух будет использован. Какой из них не определен. objc [25120]: класс TKWindow реализован как в /Users/XX/anaconda/lib/libtk8.5.dylib, так и в /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. Один из двух будет использован. Какой из них не определен.

Я не знаю, как это исправить. Я не использую виртуальную машину. Не могли бы вы помочь мне? Спасибо!

PS: Я узнал, что добавив:

import matplotlib
matplotlib.use( '') TkAgg

перед import matplotlib.pyplot, похоже, работает. Но добавлять эти две строки кодов каждый раз раздражает... Кто-нибудь знает, что происходит и как я могу это исправить? Спасибо!

Ответ 1

Я запускаю свой скрипт в virtualenv. Версия Python - 3.5.

Добавить строку:

backend: TkAgg

в файле:

~/.matplotlib/matplotlibrc

Это решило проблему.

Ответ 3

У меня также была такая же ошибка. То, что я сделал, это установить пакеты miniconda и использовать pythonw. Приложение Python уже было установлено на моем Mac. Установка так же просто, как разбить яйцо. Просто напишите файл.sh в терминале.

Ответ 4

Я установил Jupyter Notebook в virtualenv и ниже работал для меня:

На консоли:

echo "backend: TkAgg" >> ~/.matplotlib/matplotlibrc
pip install matplotlib==2.1.0

На ноутбуке:

import matplotlib

Перезапустить ядро:

dataframe.plot.hist()
...

По моему мнению, он исправит ошибку.

Ответ 5

У меня были те же проблемы в python 2.7 в virtualenv, и мне удалось исправить их, просто понизив matplotlib до версии 2.1.0