Como garantir que o matplotlib em um virtualenv do Python 3 use o backend do TkAgg?

4

Estou usando o Ubuntu 16.04 com o Python 3. Usando o APT para instalar o python3-matplotlib e imprimir o back-end do matplotlib, obtemos TKAgg , o que é esperado porque o Ubuntu tem 16.04 python3-tk instalado. Isso é feito executando:

sudo apt install python3-matplotlib
python3 -c 'import matplotlib as mpl; print(mpl.get_backend())'

No entanto, se eu criar um virtualenv para o Python 3, ative o virtualenv, instale matplotlib usando pip e, em seguida, imprima o backend do matplotlib, recebo agg . Isso é feito executando:

virtualenv venv -p python3
source venv/bin/activate
pip install matplotlib
python -c 'import matplotlib as mpl; print(mpl.get_backend())'

Parece que o matplotlib no virtualenv não está ciente da presença do backend TkAgg no sistema, o que não é surpresa, pois o virtualenv não vê os pacotes do site do sistema quando a opção --system-site-packages não é usada. Forçando o matplotlib a usar o backend TkAgg e, em seguida, importando matplotlib.pyplot , dá ImportError: cannot import name '_tkagg' como esperado. Isso é feito executando:

python -c "import matplotlib as mpl; mpl.use('TkAgg'); import matplotlib.pyplot as plt"

Portanto, como posso garantir que o matplotlib em um virtualenv do Python 3 use o backend TkAgg ?

    
por edwinksl 11.06.2016 / 01:18

1 resposta

2

Você precisa instalar o pacote tk-dev executando:

sudo apt install tk-dev

Em seguida, reinstale o matplotlib no virtualenv executando:

pip --no-cache-dir install -U --force-reinstall matplotlib

Verifique se o backend TkAgg é usado, verificando se o código a seguir retorna TkAgg :

python -c 'import matplotlib as mpl; print(mpl.get_backend())'
    
por edwinksl 11.06.2016 / 01:18