我使用的是 Ubuntu 16.04 和 Python 3。使用 APT 安装python3-matplotlib
,然后打印 matplotlib 后端TKAgg
,结果为 ,这是预料之中的,因为 Ubuntu 已经python3-tk
安装了 16.04。运行以下命令即可完成:
sudo apt install python3-matplotlib
python3 -c 'import matplotlib as mpl; print(mpl.get_backend())'
但是,如果我为 Python 3 创建一个虚拟环境,激活该虚拟环境,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 不知道TkAgg
系统中后端的存在,这并不奇怪,因为当--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"
因此,如何确保 Python 3 virtualenv 中的 matplotlib 使用TkAgg
后端?
答案1
您需要tk-dev
通过运行以下命令来安装该包:
sudo apt install tk-dev
然后,通过运行以下命令在虚拟环境中重新安装 matplotlib:
pip --no-cache-dir install -U --force-reinstall matplotlib
通过检查以下代码是否返回来验证是否使用了 TkAgg 后端TkAgg
:
python -c 'import matplotlib as mpl; print(mpl.get_backend())'