Help us understand the problem. What is going on with this article?

virtualenv環境でPILとmatplotlibをインストールしようとしたら盛大にドハマりした件

More than 5 years have passed since last update.

「はじめてのパターン認識」読書会がそろそろ終わりそうなので、次のシリーズなに読むかの話題で『実践コンピュータビジョン』が出てきました。

丁度家に死蔵されているので、引っ張り出してちょっと読んでみようと思ったのですが、環境作るところでドハマりしてしまいました。しかも割とどうでもいい理由で。情けない、、、

同じ轍を踏む人が現れないよう、メモっておきます。

環境

  • Ubuntu 12.04
  • Pythonはvirtualenvを使用

PILをインストールする前に

なんにも考えずにpip install PILすればインストールできるんですが、jpegファイルを読み込んでpylabでshowしようとすると下記のエラーを吐きやがります。

IOError: decoder jpeg not available

jpegのデコーダーがないよ、って言われたのでググってみると、libjpeg-devをインストールする必要があるらしいです。
ところがsudo apt-get install libjpeg-devすると、「もうあるよーーー!」って怒られました。

aptでlibjpeg-devをインストールすると、/usr/lib/x86_64-linux-gnu/配下にlibjpeg.soが作られるんですが、pipでPILをインストールするときにこのフォルダを見てくれないらしいです。

なので、pipから見える場所にシンボリックリンクを貼りましょう。

sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/libjpeg.so

リンク張った後でPILインストールしなおしたらちゃんと動作してくれました。

参考

http://atasatamatara.hatenablog.jp/entry/20120723/1343044059

matplotlibをインストールする前に

matplotlibもpipで入ります。依存性の関係でnumpyも入ります。

ところが、pylab.show()しても何も表示されない。エラーすら出てこない。なんだこりゃ???

調べたところ、画面表示のためのbackendを適切に設定するらしいです。どこで設定してるかというと、matplotlibrcというファイルがあります。下記コマンドで場所教えてくれます。

>>> import matplotlib
>>> matplotlib.matplotlib_fname()
matplotlibrc
backend      : agg

aggっていうbackendだと、ファイルへの書き込みはできるけどウィンドウ開いて画面に表示とかはできないらしいです。

実はシステムワイドのpythonにもmatplotlib入れちゃってるんですが、そっちのmatplotlibrcを見るとbackendはTkaggになってました。Tkinterを使ってるみたい。

なのでaggからTkaggに書き換えてみます。すると今度は下記のエラーが出るようになりました。

No module named _tkagg

matplotlibをコンパイルするときに_tkagg.pyというファイルが生成されてないみたいです。これを解消するには、tk-devをインストールする必要があります。

sudo apt-get install tk-dev

今度は/usr/lib配下に入るのでリンク貼る必要はないです。tk-devを入れた後でmatplotlibをインストールし直せばおk

まとめ

私が手探りで色々試した順番で書いてしまってますが、本来はこんな流れでセットアップするべきでしょう。

sudo apt-get install libjpeg tk-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/libjpeg.so

pip install PIL
pip install matplotlib

vim /path/to/your/matplotlibrc
### backendをTkappに書き換える

ちなみに、ググれば情報はそれなりに出てくるんですが、「システムワイドのmatplotlibだとtkでちゃんと表示されるんだからtk-devが入ってないわけがない」って決めつけて確認しなかったせいでドハマりしてしまいました。

経緯は覚えてないですが、たぶんシステムワイドに入れた時にはaptで、バイナリで入れたからtk-devがなくても_tkaggが入ってたんでしょうね、、、

who_you_me
Freelance Web Developer and Data Scientist
http://d.hatena.ne.jp/fuyumi3/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした