web-dev-qa-db-ja.com

Python 3 virtualenvでmatplotlibがTkAggバックエンドを使用するようにする方法は?

PythonでUbuntu 16.04を使用しています。APTを使用してpython3-matplotlibをインストールし、matplotlibバックエンドを印刷するとTKAggが表示されます。 python3-tkがインストールされています。これは以下を実行することにより行われます:

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

ただし、Python 3のvirtualenvを作成し、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())'

Virtualenvのmatplotlibはシステム内のTkAggバックエンドの存在を認識していないように見えますが、--system-site-packagesオプションが使用されていない場合、virtualenvがシステムサイトパッケージを表示しないことを考えると驚くことではありません。 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バックエンドを使用するようにするにはどうすればよいですか?

4
edwinksl

次を実行してtk-devパッケージをインストールする必要があります。

Sudo apt install tk-dev

次に、次を実行して、virtualenvにmatplotlibを再インストールします。

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

次のコードがTkAggを返すかどうかを確認して、TkAggバックエンドが使用されていることを確認します。

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