Как обеспечить, чтобы matplotlib в Python 3 virtualenv использовал бэкэнд TkAgg?
Я использую Ubuntu 16.04 с Python 3. Использование APT для установки python3-matplotlib а затем печать бэкэнда Matplotlib дает TKAgg, что ожидается, потому что Ubuntu 16.04 имеет python3-tk установлены. Это делается путем запуска:
sudo apt install python3-matplotlib
python3 -c 'import matplotlib as mpl; print(mpl.get_backend())'
Однако, если я создаю virtualenv для Python 3, активируйте virtualenv, установите matplotlib с помощью pip а затем распечатать бэкэнд Matplotlib, я получаю agg вместо. Это делается путем запуска:
virtualenv venv -p python3
source venv/bin/activate
pip install matplotlib
python -c 'import matplotlib as mpl; print(mpl.get_backend())'
Похоже, что matplotlib в virtualenv не знает о присутствии TkAgg бэкэнд в системе, что неудивительно, учитывая, что virtualenv не видит пакеты системного сайта, когда --system-site-packages опция не используется. Заставить matplotlib использовать TkAgg бэкэнд и затем импорт matplotlib.pyplot дает ImportError: cannot import name '_tkagg' как и ожидалось. Это делается путем запуска:
python -c "import matplotlib as mpl; mpl.use('TkAgg'); import matplotlib.pyplot as plt"
Поэтому, как я могу гарантировать, что Matplotlib в Python 3 virtualenv использует TkAgg бэкенд?
1 ответ
Вам необходимо установить tk-dev пакет, запустив:
sudo apt install tk-dev
Затем переустановите matplotlib в virtualenv, выполнив:
pip --no-cache-dir install -U --force-reinstall matplotlib
Убедитесь, что бэкэнд TkAgg используется, проверив, возвращает ли следующий код TkAgg:
python -c 'import matplotlib as mpl; print(mpl.get_backend())'