naoya_t@hatenablog

いわゆるチラシノウラであります

graph-tool(のMacへのインストールに挫折してvagrantと戯れるの巻)

Pythonでグラフの最小カットを計算しようと思ったのだけれど、Wikipediaから拝借してきた最大フローを求めるFord-Fulkersonコードを元に書いたものでイマイチ速度が出なかった*1ので、速いと噂
graph-tool
を試してみることにした。

brewで入れるとか、easy_installで入れるとか色々試したけれど自分のMac環境では依存関係のあちこち(Boost, CGAL, cairo, ...)で軒並み引っかかってビルドに失敗する。

Ubuntuだとapt-getで一発で入ったのに。

時間も気力も溶けて行くので、諦めてローカルにUbuntuvirtualboxを立てて使うことにした。vagrant便利だし。
http://qiita.com/awakia/items/895b3d61311b19737237 あたりを見て

boxの選択は Ubuntu Quantal 64 (12.10) Vanilla (※389MB) にしてみる。

$ vagrant box add quantal64-vanilla https://dl.dropboxusercontent.com/u/165709740/boxes/quantal64-vanilla.box

$ vagrant init quantal64-vanilla

$ vagrant up

これで

$ vagrant ssh

ローカルのvirtualboxに入れる。

Pythonは2.7.3, 3.2.3が入っていた。

本家ダウンロードページにある指示どおりに /etc/apt/sources.list を編集し、apt-get update した後

vagrant@quantal64-vanilla:~$ sudo apt-get install python-graph-tool

など実行。graph-tool がさくっと入った。

Mac側のホームディレクトリでvagrantを立てたので、virtualbox側の /vagrant/ 以下にホームの内容が見える。個人的に使うにはとても便利。

Mac側でスクリプトを編集して

$ vim foo.py

中身はこんな感じ。ここの最初のプログラムから。

from graph_tool.all import *

g = Graph()

v1 = g.add_vertex()
v2 = g.add_vertex()

e = g.add_edge(v1, v2)

graph_draw(g, vertex_text=g.vertex_index, vertex_font_size=18,
           output_size=(200, 200), output="two-nodes.pdf")

print(v1.out_degree())

これをvirtualbox側で実行

vagrant@quantal64-vanilla:~$ python graph.py
** (graph.py:25309): WARNING **: Could not open X display

うーむ。
Xが開けないのはMac側に繋いでやればいいはずなので*2Mac側で

$ vim ~/.vagrant.d/boxes/quantal64-vanilla/virtualbox/Vagrantfile 
Vagrant::Config.run do |config|
  # This Vagrantfile is auto-generated by `vagrant package` to contain
  # the MAC address of the box. Custom configuration should be placed in
  # the actual `Vagrantfile` in this box.
  config.vm.base_mac = ...

  config.ssh.forward_x11 = true  ## ←この1行を追加
end

...

これでvagrantを立ち上げなおしたら行けるんじゃね

vagrant@quantal64-vanilla:~$ exit
logout
Connection to 127.0.0.1 closed.
$ vagrant halt
$ vagrant up
$ vagrant ssh
...
Last login: Wed Jun 26 07:11:08 2013 from 10.0.2.2
vagrant@quantal64-vanilla:~$ python graph.py
1

今度はうまく行った。
Mac側で

$ open two-nodes.pdf 

すると
f:id:n4_t:20130626161813p:plain
ちゃんと出来てた。

*1:see gist https://gist.github.com/naoyat/5866296

*2:本当はXを開かずにどうにかできるオプションがあるのではないかと期待