blockdiagをMacでもUbuntu Serverでも導入する

最初に言っておく。PILが危険だ

easy_install は危険だ!!!!インストールは簡単だがアンインストールがタルい!!!!*1PIL でハマるから pip を使うんだ!!!!
Pythonの環境構築メモ - atas
PIL まわりでハマる可能性はかなりあるから、公式ドキュメントでは easy_install しているけど pip で virtualenv で管理したほうが安全だと思う。製作者の世界の小宮さん( @tk0miya さん)はどう言うかわからないけど、おれはそう言っておくよ。

@xxxxxxxxx
pip でなくて easy_install 使ってるのは、あんまり理由はないですが、Windows で egg を落とせないってのがひとつあります。virtualenv は「単にツールを使いたい人」には大げさなので、標準の手順では紹介してません。

なるほどなー。
簡単に pip を概説すると npm とか cpan とか bundler みたいにこうパッケージ管理システムです。で、それを簡単に(Python自体も含めて)サンドボックスにできるのが virtualenv です。

easy_install pip
# これ以後は pip で管理する

普段 Python を使わない人は無理にサンドボックスにしなくてもグローバルにおいておいてもいいかもしれない。そこらへんは自己責任。自分はとりあえず必ずサンドボックス内で作業するようにしている。

# virtualenv と便利スクリプトの virtualenvwrapper を導入
pip install virtualenv
pip install virtualenvwrapper
# サンドボックス作成
mkvirtualenv diag

blockdiag 導入でハマりやすいポイント

  • PIL がライブラリをみてくれなくてハマる
  • TrueType Font を指定できなくてハマる

基本的にはこれだけです

Macは簡単

環境

  • OS X Lion
  • なので Python 2.7
  • HomeBrew前提です

blockdiag の概要 — blockdiag 1.0 documentation
この公式ドキュメントのとおりに Foluma を作成してやる

vi /usr/local/Library/Formula/freetype2.rb
require 'formula'

class Freetype2 <Formula
  url 'http://sourceforge.net/projects/freetype/files/freetype2/2.4.4/freetype-2.4.4.tar.gz/download'
  homepage 'http://freetype.sourceforge.net/index2.html'
  md5 '9273efacffb683483e58a9e113efae9f'
  version '2.4.4'

  # depends_on 'cmake'

  def install
    system "./configure", "--disable-debug", "--disable-dependency-tracking",
                          "--prefix=#{prefix}"
    # system "cmake . #{std_cmake_parameters}"
    system "make install"
  end
end
brew install freetype2
pip install PIL
pip install blockdiag

これで好きに作成できる。クッソ簡単である。世界の小宮さんすごい。

本題::Ubuntu Server で blockdiag 導入する

環境

  • Ubuntu 12.04 LTS
  • Python 2.7
  • ホストはMacでVMとして Ubuntu Server を立てている。共有フォルダ経由で png ファイルを取り出そうとする
なにはともあれ PIL でハマらないために

以前 http://d.hatena.ne.jp/atasatamatara/20120723/1343044059 ってのを書いたけど @hajime_nakagami さんの http://nakagami.blog.so-net.ne.jp/2012-07-31 のほうがよくまとまっている。これのとおりに PIL をインストールする前に準備しておく

# 各種画像処理関係のライブラリを導入
sudo apt-get install python-imaging

って書いたけど

@xxxxxxxxx
apt-get install python-imaging だと -dev パッケージが入らないので、build-dep がいいですよー。

こっちのほうがいいらしい
なんか PIL は /usr/lib/ に関連ファイルがないとインストール時に見てくれないっぽいのでかならず先にいれておく

# x86_64-linux-gnu あたりの部分などは適宜読み替える可能性がある
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
# python-imaging で入ったのは今回は libfreetype.so.6 だった
# 今回いろいろ迷ってて sudo apt-cache search freetype | less した
# libfreetype6 - FreeType 2 フォントエンジン共有ライブラリファイル
# libfreetype6-dev - FreeType 2 font engine, development files
# ただしこれらは今回関係ないっぽい
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /usr/lib/

で、FreeType font もいれる必要がある。よくわかんないので無理やりさがした

# とりあえず ttf でさがすかー
# とりあえず ipafont がたしか TrueType Font だったなー
sudo apt-cache search ttf | less
# とりあえず ttf-ipafont-uigothic ってのが IPA の日本語フォントっぽいなー
sudo apt-get install ttf-ipafont-uigothic

全部いれてから pip instal blockdiag そして依存関係にある PIL

pip install blockdiag

これで手元では問題なく日本語ファイルが扱えることを確認しました。
フォントを強制指定する場合は

blockdiag -f /usr/share/fonts/truetype/ipafont-nonfree-uigothic/ipagui.ttf hoge.diag

公式ドキュメントにあるとおりデフォルトのフォント指定する場合は ~/.blockdiagrc に

[blockdiag]
fontpath = /usr/share/fonts/truetype/ipafont-nonfree-uigothic/ipagui.ttf
蛇足::エラーとか

せっかく blockdiag いれたのに!

blockdiag hoge.diag
# ERROR: The _imagingft C module is not installed
# ERROR: UnicodeEncodeError caught (check your font settings)

エラーになったら落ち着いてシンボリックリンクとかを確認して

# 再インストール
pip uninstall PIL; pip install PIL

パッケージなにいれたか困ったら

dpkg -l | less

このパッケージどこに実体があるんだ????と思ったらとりあえず find で探している

# あの ttf ってどこにあるんだ?
# * でワイルドカード指定
sudo find / -name "*ttf"
# あの libjpeg とかってどこにあるんだ?
sudo find / -name "*libjepeg*"

*1:sys.pathあたりからたどってなんかすれば手動で消せるはずだけど、それをやるのはだるい