構造解析ことはじめ/03 プログラムのインストール

PyMOL -- Vine 4, CentOS 5, Fedora  

PyMOLは有料サポートになってしまったので、実行ファイルは自分でビルドする必要があります。しかも新版のソースコードは通常ファイルの形式ではダウンロードできなくなってしまったので少々複雑な手順が必要になります(ろくなドキュメントもありません)。最近ますますフリーのダウンロードはわかりにくくなってます…

が、Fedora (10以降) ユーザは

# yum install pymol

で、CentOS 5ユーザは

# rpm -i http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

で、EPELリポジトリを追加した後、

# yum install pymol

で、簡単にインストールできます。

バイナリが入手できない方は、以下の手順に従ってソースコードの取得、ビルド、インストールに挑戦してみて下さい。

ソースコードの取得  

まず、ソースコードから取得します。慣れない人はここからいきなり敷居が高いです [huh]
取得方法は、

  1. Webブラウザで取得する(かんたん)
  2. バージョン管理システムSubversionで取得(慣れてたら楽)

がありますので、それぞれについて解説します。

Webブラウザで取得する  

最近気づいたのですが、Webブラウザでtarアーカイブをダウンロードできるようになっています。PyMOLはSourceForgeというオープンソースソフトウェア支援サービスでホストされていますが、そのサーバがもっている機能でダウンロード可能です。2010年08月時点でのリリース最新版1.3r1のディレクトリは以下のリンクでジャンプ可能です。ただし、PyMOLは常にアップデートを繰り返しているので、どれがリリース最新版かというとなかなか決められないのですが・・・

ここのDownload GNU tarballをクリックすることでtarアーカイブをダウンロードすることができます。アーカイブを取得したらビルドに進みます。
その他の特定のリビジョンを取得したい場合はSticky Revisionに取得したいリビジョン番号を指定すればそのリビジョンにジャンプします。リビジョン管理については次のセクションのSubversionで取得を参考にしてください。
リポジトリのリビジョン一覧は以下のURLで確認可能です。

参考
現時点での最新版を示すtrunkへは以下のリンクでジャンプできます。

Subversionで取得する  

バージョン管理システムのSubversionを使います。Subversionとはソースコードレベルでのバージョン管理を行うためのプログラムでチームでの開発に主に使われています。Vine4ではaptでCentOS5ではyumでsubversionパッケージをインストールすることで使用可能になります。

# apt-get install subversion <-- Vineの場合
# yum install subversion     <-- CentOSの場合

ソースコードを取得する  

PyMOLはブランチ付け(リリース番号などで分けること)が結構適当なので、リリース版などがブランチされていない場合があり、特定のリビジョンを指定してダウンロードしなければなりません。リビジョンとバージョンの関係は以下の通りです。

リビジョンタグ/ブランチバージョン確認
3913-1.3r12010-08-27
3866-1.2r22009-10-15
3827-1.2r12009-07-24
branches/b11/pymol1.1
3143-1.1 beta-3
tags/1.0r2/pymol1.0r2

リビジョンとバージョンの関係は正確ではないと思われますので、最新版を落としてもいいような気もします。私は不安定だとイヤなのでバージョンの付いたリビジョンを落とすようにしています。

任意のリビジョンを取得するには以下のコマンドです。

svn -r RevNo export https://pymol.svn.sourceforge.net/svnroot/pymol/trunk/pymol toDirectory

RevNoは取得するリビジョン番号(例えば3827)、toDirectoryはダウンロードするディレクトリです。toDirectoryにpymol-1.2r1と指定するとカレントディレクトリにpymol-1.2r1を作成してその下にダウンロードします。ここでは1.2 release-1(rev.3827)を取得します。

% svn -r 3827 export https://pymol.svn.sourceforge.net/svnroot/pymol/trunk/pymol pymol-1.2r1

取得したらビルドします。

また、各リビジョンのコメントを確認するにはlogコマンドを使用します。--limitオプションを付けることで最大表示数を指定できます。

% svn log --limit 10 https://pymol.svn.sourceforge.net/svnroot/pymol/trunk/pymol
------------------------------------------------------------------------
r3917 | inchoate | 2010-08-25 03:31:16 +0900 (水, 25  8月 2010) | 1 line
Fixed the name confusion w/fofc and 2fofc maps.  Also improved the map names when saved.
------------------------------------------------------------------------
r3916 | inchoate | 2010-08-13 00:40:56 +0900 (金, 13  8月 2010) | 1 line
added visibility flag for measurement wizard
...

こんな感じで内容を確認できます。

ブランチからソースコードの取得  

通常Subversionでリリースする場合、ブランチから取得できるものなので、過去のPyMOLはリリース番号などを使って取得することもできます。その方法も記録として残しておきます。

% svn export https://pymol.svn.sourceforge.net/svnroot/pymol/tags/1.0r2/pymol pymol-1.0r2

このコマンドで現在のディレクトリにpymol-1.0r2が作成されソースファイルがダウンロードされます。また必要になったときにわざわざSubversionで取得しなくてもいいようにtarでまとめておきます。

% tar zcvf pymol-1.0r2.tar.gz ./pymol-1.0r2

通常、リリースバージョンはbranchesやtags以下で管理されており、tags以下の内容を確認することで取得できるバージョンが確認できます。ディレクトリ内容の取得は以下のコマンドで行います。

% svn ls https://pymol.svn.sourceforge.net/svnroot/pymol/tags

Linuxコマンドのlsと似た感じです。オープンソースのプログラムは以前はCVSで管理されていましたが、最近Subversionが使用されることが多くなってきていますので使い方を覚えておけば役に立つかもしれません。

参考

ビルド  

さて、少々横道にそれましたが、続いてPyMOLをビルドします。ビルドは取得したディレクトリに入ってから作業します。
ビルドに必要になるパッケージをapt(Vine4)またはyum(CentOS5)でインストールしておいてください。freetype2-devel以外は共通のパッケージ名です。

aptでインストール -- Vine 4  

yumでインストール -- CentOS 5  

PyMOLのインストール  

必要なプログラムをインストールした後、コマンドを実行します。ビルド以降はrootで行います。
後述の理由(distutils.coreがない)があるためpythonは/usr/bin/pythonを使用するのが無難でしょう。

% cd pymol-1.2r2
% /usr/bin/python setup.py build
# /usr/bin/python setup.py install
# /usr/bin/python setup2.py install
# cp pymol /usr/local/bin

PyMOL本体のインストールは完了です。必要なファイルはpymolだけなので、インストールが完了したら使用したpymol-1.2r2ディレクトリごと削除しても問題ないようです。続いて必要なツールキットをインストールします。

Python Megawidgetsのインストール  

通常はPython Megawidgets(Pmw)というツールキットがインストールされてませんのでPmwをインストールします。

このサイトからPmw.1.3.2.tar.gzを取得します。

% tar zxvf Pmw.1.3.2.tar.gz
% cd Pmw.1.3.2/src
# /usr/bin/python setup.py install

以上でPmwがインストールされ、利用可能になります。

PyMOLのアンインストール  

PyMOLをアンインストールしたい場合はスクリプトを使って行います。インストール時のディレクトリが残っていればそこで、存在しない場合はもう一度アーカイブを展開します。

% cd pymol-1.2r2
# /usr/bin/python setup2.py uninstall

これでアンインストールされます。

Column:PyMOL本体はどこに?
インストール時に/usr/local/binディレクトリにコピーするのはpymolという名前のファイルですが、これは

#!/bin/sh
/usr/bin/python /usr/lib/python2.5/site-packages/pymol/__init__.py "$@"

という起動スクリプトに過ぎません。一体、本体はどこにあるのでしょうか?
起動スクリプトをよく見てみると/usr/lib/python2.5/site-packages/pymol/__init__.pyというファイルを読み込んでいます。結局のところ、PyMOLはPythonモジュールとしてインストールされているわけですね。1.2r2の場合、関連しているディレクトリは以下のようです。

  • /usr/lib/python2.5/site-packages/pymol -- PyMOL本体
  • /usr/lib/python2.5/site-packages/pmg_tk -- PyMOLスキンとプラグインモジュール
  • /usr/lib/python2.5/site-packages/pmg_wx -- 今のところ使ってない?(将来的にはwxPythonを使うってことでしょう)
  • /usr/lib/python2.5/site-packages/chempy -- AMBERなどが使えるのか?(調べてないです)

プラグインを一般ユーザーでインストールしたい場合はpmg_tk/startup/ディレクトリに書き込み属性を付ければOKです。

起動  

/usr/local/binへのパスが通っていれば

% pymol

で起動するはずです。

トラブル  

インストール時に遭遇したトラブルをメモしておきます。

distutils.coreがない  

インストール時のpython setup.py installを実行したときに以下のメッセージが出て停止しました。

'import site' failed; use -v for traceback
Traceback (most recent call last):
  File "setup.py", line 8, in ?
    from distutils.core import setup, Extension
ImportError: No module named distutils.core

これはCCP4 6.0(CCP4 6.1以降なら多分問題なし)と一緒にインストールされたpythonが使用されたため起こると考えられます*1

% which python

で、/usr/bin/python以外のファイル名が表示されたら(私の場合は/usr/local/ccp4/ccp4mg-1.1.1/bin/pythonでした)、それが原因です。使用するpythonを指定することで解決します。

% /usr/bin/python setup.py build

で実行されます。これ以降の操作も/usr/bin/pythonを使用します。

セグメンテーション違反が発生して起動しない  

セグメンテーション違反(Segmentation fault)が発生するのにはさまざまな要因が絡みますが、nVidiaのグラフィックカードを使用している場合はドライバに問題があるのかもしれません。
わたしの環境(たぶんGeForce7600GSあたり)ではバージョン173.14.12では起動しませんでしたが、バージョン169.12をインストールしなおしたところ解消しました。その時の手順を以下に示します。

  1. インストールしたPyMOLを削除します
    # cd <PyMOLをビルドしたディレクトリ>
    # /usr/bin/python setup2.py uninstall
  2. nVidiaのサイトのArchived driversの中から必要なバージョンを取得します。
  3. そのドライバをインストールします。
  4. もう一度PyMOLのビルドからやり直してインストールします

ドライバを入れ替えるだけでなく、PyMOLをビルドし直さなければ適切なバージョンでも解決しません。苦労した〜・・・
なお、そのドライバが使用可能かそうでないかは、起動した瞬間にセグメンテーション違反がでるか、一瞬ウィンドウが表示されるかで判断できます。一瞬ウィンドウが表示された後のセグメンテーション違反ならおそらく大丈夫です。PyMOLを再構築しましょう。

 

nVidiaのドライバはこのような問題(OpenGLがらみ)が発生することがあるので覚えておくと、はまらなくていいかもしれませんね(nVidiaのドライババージョン17xを使ったとき、COOTでも同様の事象が発生しました) [smile]
ただ、カーネルバージョンが新しいと(2.6.27とか)、nVidiaの古いドライバはコンパイルできないので悩ましいところかも・・・

TclError: Can't find a usable init.tcl  

CCP4 6.1.0をインストールした後、以下のようなエラーが出てExternal GUIが表示されなくなった。

TclError: Can't find a usable init.tcl in the following directories: 
 /home/fr45/tcltk++/Linux/lib/tcl8.4 /usr/lib/tcl8.4 /lib/tcl8.4 /usr/library
 /library /tcl8.4.18/library /home/fr45/tcltk++/Linux/lib/tcl8.4

これは、init.tclファイルをPyMOLが見付けられなかったことが原因のようです。これを解決するには環境変数TCL_LIBRARYをセットします。方法は二つあり1)環境変数としてセットしてしまう、2)PyMOL起動ファイルを書き換える、ということです。

  1. 環境変数としてセットしてしまう
    tcshでは、
    setenv TCL_LIBRARY $CCP4I_TCLTK/../lib/tcl8.4 -- CCP4の付属ライブラリを使う場合
    または
    setenv TCL_LIBRARY /usr/share/tcl8.4          -- Vine 4.2標準
    のように指定します(shならexport TCL_LIBRARY=/usr/share/tcl8.4など)。.cshrcファイルに記述してしまえばいいと思います。
    CCP4環境ではTclがCCP4パッケージに付属していたものが使われますのでバージョンをあわせるために$CCP4I_TCLTK付属のライブラリにしたほうがいい気がします。
  2. PyMOL起動ファイルを書き換える
    もし環境変数でいちいち影響されるのがイヤな場合は、起動ファイルである/usr/local/bin/pymolを修正してしまうのも手です。
    #!/bin/sh
    export TCL_LIBRARY=/usr/share/tcl8.4 <-- これを追加
    /usr/bin/python /usr/lib/python2.4/site-packages/pymol/__init__.py $*
    こんな感じですね。これならCCP4の環境に影響されないと思います。/usr/share/tcl8.4の場所はシステムによって異なるかもしれませんので確認してください。
*1 2.3よりも古いと問題が出るようです