Как обеспечить, чтобы 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())'
Другие вопросы по тегам