web-dev-qa-db-fra.com

Comment assurer matplotlib dans un Python 3 virtualenv utilise le backend TkAgg?

J'utilise Ubuntu 16.04 avec Python 3. Utiliser APT pour installer python3-matplotlib, puis imprimer le back-end de matplotlib donne TKAgg, ce qui est attendu car Ubuntu en a 16.04. a python3-tk installé. Ceci est fait en lançant:

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

Cependant, si je crée un virtualenv pour Python 3, activez-le, installez matplotlib avec pip, puis imprimez le backend matplotlib. Je reçois plutôt agg. Ceci est fait en lançant:

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

Il semble que matplotlib dans virtualenv ne soit pas au courant de la présence du serveur TkAgg dans le système, ce qui n’est pas surprenant étant donné que virtualenv ne voit pas les packages de site système lorsque l’option --system-site-packages n’est pas utilisée. . Forcer matplotlib à utiliser le backend TkAgg, puis importer matplotlib.pyplot donne ImportError: cannot import name '_tkagg' comme prévu. Ceci est fait en lançant:

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

Par conséquent, comment puis-je m'assurer que matplotlib dans un virtualenv Python 3 utilise le backend TkAgg?

4
edwinksl

Vous devez installer le paquet tk-dev en lançant:

Sudo apt install tk-dev

Ensuite, réinstallez matplotlib dans virtualenv en lançant:

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

Vérifiez que le backend TkAgg est utilisé en vérifiant si le code suivant renvoie TkAgg:

python -c 'import matplotlib as mpl; print(mpl.get_backend())'
2
edwinksl