Python のモジュールについて

普段 Python は PyMOL の拡張を書くときくらいしか使わない「にわか」なので、文字コードとかいろいろなところで引っかかっている。今回はモジュールについて。例として cctbx を挙げているが、他のモジュールでも同じである。

cctbx は互換性問題などのごたごたを解消するため、Python と同梱された状態で配布されている。それは cctbx.python とすれば起動する。libtbx.python なども同じだ。これはシェルスクリプトであり、PYTHONHOME などの準備を整えた上で python ランタイムを起動しているようだ。これを真似てやれば、推奨はされないけれども、OS 同梱の Python から cctbx を呼ぶこともできる。

Python でモジュールを import するときの検索場所は

import sys;
sys.path

として確認できる。ここに append してもよいのだが、サブディレクトリを再帰的に探索してくれるわけではないので注意が必要。サブディレクトリも追加するには、

import site;
site.addsitedir("/path/to/module")

とするとよいらしい。"/usr/local/ccp4-6.3.0/ccp4-6.3.0/lib/cctbx/cctbx_sources/cctbx_project" を追加することで、import cctbx が通ることは確認した。依存する各ライブラリがちゃんと参照できるかまでは確かめていない。

PyMOL を呼びたいときも同様である。

ただ現実的には、cctbx.python のほうにいろいろパスを追加して、OS 付属の matplotlib などを呼べるようにしたほうが簡単である(site.addsitedir("/usr/lib/pymodules/python2.7/") など)。