Серверная часть Matplotlib не работает должным образом на WSL - PullRequest
0 голосов
/ 20 января 2020

Я борюсь с известной старой проблемой с back-end matplotlib ( связанных сообщений здесь : ( 1 ), ( 2 )).

Текущая настройка:

  • conda 4.6.11 (python 3.7.3, matplotlib 3.0.3)
  • Ubuntu 18.04 (через WSL )

Я попытался решить несколько способов эта проблема (с помощью matplotlib.use("TkAgg") вызова метода в моей программе, ввод ~/.config/matplotlib - если вы не знакомы с этими подходами, они указаны в первом посте (1)), но, похоже, ничего не работает.

Тем не менее, я нашел второй пост - (2) - и это выглядит как наиболее логичное решение. Как заявил Адриан Роузброк в этом посте, чтобы решить эту проблему, вы должны (a) удалить matplotlib с pip uninstall matplotlib, (b) установите несколько библиотек из TkInter GUI библиотеки с sudo apt-get install tcl-dev tk-dev python-tk python3-tk и (c) переустановите matplotlib снова с помощью fre sh TkInter зависимостей.

Мой вопрос: из-за того, что я использую conda , если я приступаю к удалению matplotlib с pip, есть ли опасность испортить другие зависимости где-нибудь, делая это? Кроме того, matplotlib будет вести себя так же, если его переустановить с apt-get или вручную git clone https://github.com/matplotlib/matplotlib.git и запустить установку?

Или есть какой-нибудь способ? исправить эту проблему, я не могу найти?

Код, который я пытаюсь запустить:

# Set up the back-end for the lib
import matplotlib
matplotlib.use("Qt5Agg")
import matplotlib.pyplot as plt

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

1 Ответ

0 голосов
/ 20 января 2020

Мне удалось найти решение моей проблемы (тем не менее, я думаю, что это скорее альтернатива, чем правильное решение, я знаю, откуда возникла проблема, и вам следует знать, как я поступил так же).

Как упоминалось в посте, я использую установку Ubuntu 18.04 через WSL 2 на Windows 10. WSL - это среда в Windows 10, которая поддерживает запуск Linux родные двоичные файлы, и они должны быть максимально легкими. Это означает, что он не предоставляет пользователю комплекс GUI, а только терминал. Для получения дополнительной информации проверьте эту ссылку.

Я написал свой код в Visual Studio, который имеет расширение, которое интегрируется с WSL и в основном подключается к этой виртуальной машине. Это смутило меня, потому что я был в основном в Windows, пишу код в своем VSCode, но код работал на этой конкретной удаленной виртуальной машине через WSL. Еще одна интересная особенность этой виртуальной машины заключается в том, что даже если она имеет собственную изолированную файловую систему, вы можете получить доступ к Windows 'файлам через /mnt.

Как говорится, причина matplotlib не работал должным образом (более конкретно, метод show(), не обеспечивающий вывода) фактически был WSL . Приложение Python, которое я пытался запустить, очевидно, работало на WSL , но из-за природы WSL вывод не мог быть визуализирован.

Тот факт, что консолидирует это убеждение, использует тот же код с той же настройкой (Python 3.7.4, Conda 4.6.11 ) напрямую из Windows 10, без каких-либо WSL , как советует мне ImportanceOfBeingErnest. Очевидно, что код был успешно выполнен с желаемым графиком в качестве вывода.

Альтернатива для WSL 2 :

  • Из-за к тому, что вы можете получить доступ к Windows файлам из /mnt, вместо того, чтобы пытаться нарисовать фигуру с помощью plt.show(), просто используйте метод plt.savefig("figure_name.png")
  • .png затем сохраняется на вашем компьютере и может быть визуализирован на вашем Windows

Off-topi c: Предпочитаете ли вы переходить с conda на ваш Windows или WSL 1/2 , я настоятельно рекомендую использовать виртуальные среды , которые он предоставляет, потому что они универсальны и позволяют вам настроить Python библиотеки с легкостью.

...