kivantium活動日記

プログラムを使っていろいろやります

Open Babelのビルドとインストール

Open Babel は化学で使われる分子フォーマット間の変換によく使われるソフトです。

開発されたばかりの機能を使うためには自分でビルドしてインストールする必要があるのですが、Pythonバインディングコンパイルするところにハマったのでメモしておきます。 基本的にはInstall Open Babelを見ればいいです。 環境はUbuntu 16.04を使いました。

必要なライブラリのインストール

sudo apt install cmake python3-dev libxml2-dev zlib1g-dev libeigen2-dev libcairo2-dev

ビルドとインストール

git clone https://github.com/openbabel/openbabel.git
cd openbabel
mkdir build
cd build
cmake .. -DPYTHON_BINDINGS=ON
make
sudo make install
echo 'export PYTHONPATH=/usr/local/lib:$PYTHONPATH' >> ~/.bashrc
source ~/.bashrc

pythonを起動して import pybel を実行してエラーが起きなければ成功です。

問題点

この方法でインストールできるのはaptで入れたpython 2.7だけで、Python 3やpyenvで入れたPythonではリンクに失敗します。 General discussion - OpenBabel for Python 3?Python 3向けにインストールする方法が書いてありますが、今のところうまくいっていません。 成功したら追記します。

C++で使う

インストールすると obabelなどの通常のコマンドラインツールが使えるようになります。

より複雑なことをするにはC++Pythonなどでコードを書くことになります。 以下に標準入力からSMILESを読んで、3次元座標を計算した後、標準出力にSDFを吐くコード例を示します。 エラー処理は省略しています。

#include <iostream>

#include <openbabel/mol.h>
#include <openbabel/obconversion.h>
#include <openbabel/builder.h>

int main(int argc,char **argv) {
    OpenBabel::OBConversion conv(&std::cin, &std::cout);
    OpenBabel::OBMol mol;
    OpenBabel::OBBuilder builder;

    conv.SetInAndOutFormats("SMI", "SDF");
    conv.Read(&mol);
    builder.Build(mol);
    conv.Write(&mol);
}

コンパイルは以下のように行います。ディレクトリは環境によって異なるかもしれません。

g++ -I /usr/local/include/openbabel-2.0/  -L /usr/local/lib/openbabel/2.4.90/ hoge.cpp  -lopenbabel

Makefileの例を示します。ディレクトリ名は適宜変更してください。

CC = g++
CXXFLAGS = -I /usr/local/include/openbabel-2.0/
LDFLAGS = -L /usr/local/lib/openbabel/2.4.90/
LDLIBS = -lopenbabel

all: hoge fuga

特定商取引法に定められた事項は請求により遅滞なく提供する